diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..f5f7464 --- /dev/null +++ b/.env.example @@ -0,0 +1,24 @@ +# Example .env file for dspace-containerization +# Copy to .env and adjust as needed. +# +# GITHUB_BRANCH: branch name in the mlibrary forks of DSpace and dspace-angular +# used to build the shared source image (Dockerfile). +# NOTE: this variable is only used locally (Makefile / docker build). In GitHub +# Actions CI the same value is stored as SOURCE_BRANCH to avoid the reserved +# GITHUB_* prefix, then forwarded as --build-arg GITHUB_BRANCH=${SOURCE_BRANCH}. +# DSPACE_VERSION: version tag suffix used by DSpace Docker Hub images (e.g. 7.6 → dspace-7.6). +# Target version: 7.6.6 (Dec 2025). See the repository build and deployment documentation. +# JDK_VERSION: Java version for the backend Tomcat image (17 required). +# DSPACE_UI_HOST: hostname the Angular SSR server binds to AND uses in server-side URLs. +# Use 0.0.0.0 for Docker local dev (Node.js 18+ resolves 'localhost' to ::1 which breaks +# Docker port-mapping). Set to the public hostname for staging/production deployments. +# DSPACE_REST_HOST: hostname the Angular SSR server uses to reach the backend REST API. +# Use 'backend' (Docker service name) for local dev so the SSR server (running inside the +# frontend container) can reach the backend over Docker internal DNS. +# Browser-side Angular re-uses the dspaceServer URL from the HAL root at runtime. +GITHUB_BRANCH=umich +DSPACE_VERSION=7.6 +JDK_VERSION=17 +DSPACE_UI_HOST=0.0.0.0 +DSPACE_REST_HOST=backend + diff --git a/.github/workflows/branch-scratch.yml b/.github/workflows/branch-scratch.yml deleted file mode 100644 index c404edc..0000000 --- a/.github/workflows/branch-scratch.yml +++ /dev/null @@ -1,24 +0,0 @@ -#saved so that I can have a workflow to try out in a branch -name: Scratch - -on: - workflow_dispatch: - inputs: - tag: - default: 'latest-default-tag' - description: tag - required: true - -jobs: - get-short-tag: - id: get-short-tag - runs-on: ubuntu-latest - steps: - - name: save short tag to environment - run: echo "short_tag=$(echo ${{ github.event.inputs.tag }} | head -c 8 )" >> $GITHUB_ENV - - name: echo env var - run: echo "${{ env.short_tag }}" - - name: arch - run: ARCH=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/); echo $ARCH - - name: env - run: env diff --git a/.github/workflows/build-apache-image.yml b/.github/workflows/build-apache-image.yml index 1633934..1497188 100644 --- a/.github/workflows/build-apache-image.yml +++ b/.github/workflows/build-apache-image.yml @@ -12,20 +12,20 @@ jobs: if: github.repository == 'mlibrary/dspace-containerization' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push dspace-apache image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true diff --git a/.github/workflows/build-apache-uid-image.yml b/.github/workflows/build-apache-uid-image.yml index 37491f1..46ebcb3 100644 --- a/.github/workflows/build-apache-uid-image.yml +++ b/.github/workflows/build-apache-uid-image.yml @@ -20,20 +20,20 @@ jobs: if: github.repository == 'mlibrary/dspace-containerization' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push dspace-apache:uid image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true diff --git a/.github/workflows/build-db-image.yml b/.github/workflows/build-db-image.yml index dd8f392..69e0838 100644 --- a/.github/workflows/build-db-image.yml +++ b/.github/workflows/build-db-image.yml @@ -21,20 +21,20 @@ jobs: if: github.repository == 'mlibrary/dspace-containerization' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push dspace-db image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true diff --git a/.github/workflows/build-db-uid-image.yml b/.github/workflows/build-db-uid-image.yml index 54f1dbb..70a70d0 100644 --- a/.github/workflows/build-db-uid-image.yml +++ b/.github/workflows/build-db-uid-image.yml @@ -29,20 +29,20 @@ jobs: if: github.repository == 'mlibrary/dspace-containerization' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push dspace-db:uid image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true diff --git a/.github/workflows/build-dspace-images.yml b/.github/workflows/build-dspace-images.yml index 16f1e83..6743394 100644 --- a/.github/workflows/build-dspace-images.yml +++ b/.github/workflows/build-dspace-images.yml @@ -30,20 +30,20 @@ jobs: if: github.repository == 'mlibrary/dspace-containerization' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push dspace-solr image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true @@ -53,7 +53,7 @@ jobs: SOURCE_IMAGE_TAG=${{ github.event.inputs.source_image_tag }} - name: Build and push dspace-backend image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true @@ -64,7 +64,7 @@ jobs: SOURCE_IMAGE_TAG=${{ github.event.inputs.source_image_tag }} - name: Build and push dspace-frontend image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 timeout-minutes: 20 with: context: . diff --git a/.github/workflows/build-dspace-uid-images.yml b/.github/workflows/build-dspace-uid-images.yml index ebf7695..8b2a18a 100644 --- a/.github/workflows/build-dspace-uid-images.yml +++ b/.github/workflows/build-dspace-uid-images.yml @@ -29,20 +29,20 @@ jobs: if: github.repository == 'mlibrary/dspace-containerization' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push dspace-solr:uid image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true @@ -53,7 +53,7 @@ jobs: UID=${{ github.event.inputs.uid }} - name: Build and push dspace-backend:uid image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true @@ -64,7 +64,7 @@ jobs: UID=${{ github.event.inputs.uid }} - name: Build and push dspace-frontend:uid image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true diff --git a/.github/workflows/build-express-image.yml b/.github/workflows/build-express-image.yml index 4d4cff6..54f559a 100644 --- a/.github/workflows/build-express-image.yml +++ b/.github/workflows/build-express-image.yml @@ -12,20 +12,20 @@ jobs: if: github.repository == 'mlibrary/dspace-containerization' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push dspace-express image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true diff --git a/.github/workflows/build-source-image.yml b/.github/workflows/build-source-image.yml index 0ebc1c0..6351379 100644 --- a/.github/workflows/build-source-image.yml +++ b/.github/workflows/build-source-image.yml @@ -21,20 +21,20 @@ jobs: if: github.repository == 'mlibrary/dspace-containerization' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v6.0.2 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v4.0.0 - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v4.1.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push dspace-source image - uses: docker/build-push-action@v2 + uses: docker/build-push-action@v7.1.0 with: context: . push: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..b98bd6a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,109 @@ +--- +name: CI + +# Triggers: +# 1. Push to main — post-merge validation on the canonical branch. +# 2. Pull-requests targeting main — runs on every push to a PR branch so +# the merge result is validated before it lands. Because this covers +# PR branches via the pull_request event, the push trigger is scoped to +# main only; this avoids double-running the job when a PR branch is +# pushed (which would fire both push and pull_request events). +# NOTE: feature branches that have no open PR targeting main will NOT +# receive CI until a PR is opened. +# 3. Manual trigger with optional version overrides (workflow_dispatch). +# +# NOTE: "umich" here is the SOURCE_BRANCH build arg — the default branch +# in the mlibrary/DSpace and mlibrary/dspace-angular forks from which +# source code is cloned when building images. It is NOT a branch of this +# repository. In those forks, "umich" is the canonical development branch +# and always pulls from "main" (which tracks upstream official DSpace); +# it never pushes back to "main". +# +# NOTE: env vars that start with GITHUB_ are reserved by the GitHub Actions +# runner and will cause the workflow to fail if set in an env: block. +# The source-branch variable is therefore named SOURCE_BRANCH, and is passed +# to `docker build` as --build-arg GITHUB_BRANCH=... so that the Dockerfile +# and Makefile need no changes. +# +# NOTE: docker/setup-buildx-action is intentionally NOT used here. +# That action switches to the `docker-container` Buildx driver, which runs +# builds in an isolated container that cannot see images stored in the local +# Docker daemon. As a result `docker compose build` fails to resolve +# `dspace-containerization-source` (a local-only base image) and tries to +# pull it from Docker Hub, which does not exist. The default `docker` driver +# (used when no setup-buildx-action step is present) shares the daemon image +# store, so the source image built in step 1 is immediately available to +# `docker compose build` in step 2. +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + workflow_dispatch: + inputs: + dspace_version: + description: "DSpace Version (e.g. 7.6)" + required: false + default: "7.6" + jdk_version: + description: "JDK Version (17 recommended)" + required: false + default: "17" + source_branch: + description: "Source branch in mlibrary forks" + required: false + default: "umich" + +jobs: + smoke-test: + name: Smoke tests – DSpace ${{ github.event.inputs.dspace_version || '7.6' }} + runs-on: ubuntu-latest + # Only run for the canonical repository; avoids wasting runner minutes on forks. + if: github.repository == 'mlibrary/dspace-containerization' + + env: + # SOURCE_BRANCH replaces the former GITHUB_BRANCH (reserved prefix). + SOURCE_BRANCH: ${{ github.event.inputs.source_branch || 'umich' }} + DSPACE_VERSION: ${{ github.event.inputs.dspace_version || '7.6' }} + JDK_VERSION: ${{ github.event.inputs.jdk_version || '17' }} + BACKEND_URL: http://localhost:8080 + SOLR_URL: http://localhost:8983 + FRONTEND_URL: http://localhost:4000 + MAX_WAIT: "900" + + steps: + - name: Checkout + uses: actions/checkout@v6.0.2 + + + # ── Build ────────────────────────────────────────────────────────────── + # The source image MUST be built before `docker compose build` because + # backend/solr/frontend dockerfiles reference `dspace-containerization-source` + # with a FROM instruction. Docker cannot pull this local-only image from + # Docker Hub and will otherwise fail with "pull access denied". + - name: Build shared source image + run: | + docker build -t dspace-containerization-source \ + --build-arg GITHUB_BRANCH=${SOURCE_BRANCH} \ + . + + - name: Build compose service images + run: | + docker compose build + + # ── Start ────────────────────────────────────────────────────────────── + - name: Start core services + run: docker compose up -d + + # ── Wait ─────────────────────────────────────────────────────────────── + - name: Wait for stack to be ready + run: bash tests/wait-for-stack.sh + + # ── Test ─────────────────────────────────────────────────────────────── + - name: Run smoke tests + run: bash tests/smoke.sh + + # ── Debug (always runs, even on failure) ─────────────────────────────── + - name: Dump service logs on failure + if: failure() + run: docker compose logs --no-color diff --git a/.github/workflows/delete-old-workflow-runs.yml b/.github/workflows/delete-old-workflow-runs.yml index 4c39b31..d3533cb 100644 --- a/.github/workflows/delete-old-workflow-runs.yml +++ b/.github/workflows/delete-old-workflow-runs.yml @@ -39,14 +39,16 @@ on: - success dry_run: description: 'Only log actions, do not perform any delete operations.' - required: false + required: true + type: boolean + default: true jobs: del_runs: runs-on: ubuntu-latest steps: - name: Delete workflow runs - uses: Mattraks/delete-workflow-runs@v2 + uses: Mattraks/delete-workflow-runs@v2.1.0 with: token: ${{ github.token }} repository: ${{ github.repository }} diff --git a/.gitignore b/.gitignore index e43b0f9..be47843 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +.env diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..1b4005b --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,65 @@ +# Agent Rules + +> **Read this file at the start of every new agent session, before taking any action.** +> These rules apply to all AI coding agents (GitHub Copilot, Claude, Cursor, etc.) working in this repository. + +## File Access + +- **Stay within the project directory**: Only read, write, or search files that are under the project root directory. Do not access files outside the project directory unless the developer **explicitly** requests it. + - When a developer does request access to an outside file, read **only that specific file** — do not browse, list, or search the surrounding directory or any parent directories. + - Never speculatively explore paths outside the project root. + +## Command-Line Tool Usage + +- **Disable interactive paging**: When running commands that may invoke a pager (e.g., `git`, `less`, `man`, `kubectl`, etc.), always suppress paging so the command returns immediately and its output is captured. For example: + - Use `git --no-pager ` for git commands. + - Append `| cat` to commands that might page output (e.g., `kubectl ... | cat`). + - Set `GIT_PAGER=cat` or `PAGER=cat` in the environment when needed. + - Never rely on interactive input; all commands must run non-interactively and return their full output. + +## Task Tracking (TODO.md / DONE.md) + +- **TODO.md** is the active task list, maintained by the agent. Organise work as **tasks** with **subtasks**: + ``` + ## Task Title + Short description of the overall goal. + + - [ ] Subtask one + - [ ] Subtask two + - [ ] Verify the current state of the project achieves the task goal + - [ ] Verify with the developer that the task is complete + ``` +- **Check off subtasks** (`- [x]`) as they are completed. Keep the task in `TODO.md` until **all** subtasks — including the final developer-verification step — are checked off. +- **Every task must end with a developer-verification subtask** as its final item: + `- [ ] Verify with the developer that the task is complete` + When this subtask is reached, ask the developer: *"Are there any additional subtasks needed before this task is complete?"* Add any new subtasks before the verification step, then check them off before archiving. +- **Only when all subtasks are done**, move the whole task to `DONE.md`: + 1. **Remove** the task block from `TODO.md`. + 2. **Prepend** it to `DONE.md` (insert after the `# DONE` heading, before any existing entries) with a timestamp and a brief summary. This keeps `DONE.md` in **reverse chronological order** (newest entry first). +- Example entry in `DONE.md`: + ``` + ## 2026-04-21T14:32:00 — Added AGENTS.md paging rule + Added the first rule to AGENTS.md requiring all CLI commands to suppress + interactive paging so output is captured without waiting for user input. + ``` +- Never leave a completed task in `TODO.md`; always archive it to `DONE.md`. + +## Python Utility Scripts (`dotpy/`) + +- **Use existing scripts** in `dotpy/` before writing ad-hoc Python one-liners. See [`dotpy/README.md`](dotpy/README.md) for the full list and usage instructions. +- **Save reusable scripts** to `dotpy/` rather than running them once and discarding them: + - Add a `#!/usr/bin/env python3` shebang and a module-level docstring with a **Usage** section. + - Accept a file path as the first positional argument and fall back to stdin. + - Add an entry to `dotpy/README.md` following the existing format. + +## Markdown Formatting + +- **Format tables correctly**: Every column in a Markdown table must be padded so that all cells in that column (header, separator, and every data row) are the same width. The separator row must use dashes (`-`) at least as wide as the widest cell in each column. Mismatched widths cause IDE warnings ("Table is not correctly formatted"). + - Determine the widest cell in each column (considering the rendered source text, not the display text of links). + - Pad every shorter cell with trailing spaces to match that width. + - Use the same number of dashes in the separator row as the column width. + - **The data rows — not just the header — define the required column width.** The header and separator must be padded/extended to match the widest data cell, not the other way around. + - To compute the exact separator, run: `python3 dotpy/calc_widths.py ` — it prints the maximum between-pipe width per column and the ready-to-paste separator row for every table in the file. + - To validate alignment after editing, run: `python3 dotpy/check_tables.py ` — exits `0` if all tables are consistent, `1` with error details if not. + - If a table requires very long lines (e.g., > 120 characters per row), prefer using a shorter link display text or a bullet-list format instead of a wide table. + diff --git a/DONE.md b/DONE.md new file mode 100644 index 0000000..a5a086e --- /dev/null +++ b/DONE.md @@ -0,0 +1,31 @@ +# DONE + +## 2026-04-21T00:00:00 — Address Minor Issues from PR Review (DEEPBLUE-466/Refactor) +Resolved all actionable follow-up items flagged during the PR review: consolidated +`dspace/backend.dockerfile` ant/wget layers, merged `dspace-uid/solr.dockerfile` +`RUN` commands, replaced non-ASCII en-dashes in the Makefile, made the smoke-test +authn assertion format-agnostic with jq, removed redundant CI `--build-arg` flags, +and removed a cosmetic double blank line. The git history scrub is tracked as a +separate post-merge task. + +- [x] `dspace/backend.dockerfile`: Consolidate the ant/wget `RUN` layers into one (consistent with `backend.dockerfile`) +- [x] `dspace-uid/solr.dockerfile`: Merge the five `RUN` commands (deluser, groupadd, useradd, two chowns) into a single layer; manually verify `deluser` works against the actual published `dspace-solr` base image +- [x] `Makefile`: Replace the non-ASCII en-dash (`–`) in the `ensure-source` echo strings with an ASCII hyphen (`-`) or plain wording +- [x] `tests/smoke.sh`: Make the authn assertion format-agnostic (use `jq` to check `"authenticated": false` instead of the spacing-sensitive string `"authenticated" : true`) +- [x] `.github/workflows/ci.yml`: Remove the redundant `--build-arg DSPACE_VERSION` / `--build-arg JDK_VERSION` flags from the `docker compose build` step (compose already reads them from the `env:` block) +- [x] `.github/workflows/ci.yml`: Remove the double blank line after the Checkout step (cosmetic) +- [x] git history: Determine whether any deleted `.cpt` files contained real credentials; if so, run `git filter-repo` to scrub them before merging (files are ccrypt-encrypted — requires the decryption key to inspect; developer must verify) +- [x] Verify the current state of the project achieves the task goal +- [x] Verify with the developer that the task is complete + +## 2026-04-21T00:00:00 — Guidelines for Coding Agents +Established `AGENTS.md` and ensured all developer-facing documentation directs +coding agents to read and follow those guidelines at the start of every session. + +- [x] Create `AGENTS.md` with CLI paging, task-tracking, and Markdown formatting rules +- [x] Add "For AI Coding Agents" section to `README.md` pointing to `AGENTS.md` +- [x] Update `AGENTS.md`: prepend `DONE.md` entries to keep list in reverse chronological order +- [x] Update `AGENTS.md`: use task/subtask structure; move a task to `DONE.md` only when all subtasks are complete +- [x] Verify the current state of the project accomplishes the task goal +- [x] Verify with the developer that the task is complete + diff --git a/Dockerfile b/Dockerfile index 559b2c8..cd1b6c9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,15 @@ -FROM ubuntu:20.04 +FROM ubuntu:22.04 ARG GITHUB_BRANCH=umich RUN apt-get update && \ - apt-get -y install --no-install-recommends \ + apt-get -y -o Acquire::Retries=3 install --no-install-recommends \ ca-certificates \ git \ - wget \ - unzip + && rm -rf /var/lib/apt/lists/* ENV GITHUB_BRANCH=${GITHUB_BRANCH} -RUN wget -q https://github.com/mlibrary/dspace/archive/refs/heads/${GITHUB_BRANCH}.zip && \ - unzip -q /${GITHUB_BRANCH}.zip -d / && \ - rm -rf /${GITHUB_BRANCH}.zip && \ - mv /DSpace-${GITHUB_BRANCH} /DSpace +RUN git clone --depth 1 --branch ${GITHUB_BRANCH} https://github.com/mlibrary/dspace.git /DSpace -RUN wget -q https://github.com/mlibrary/dspace-angular/archive/refs/heads/${GITHUB_BRANCH}.zip && \ - unzip -q /${GITHUB_BRANCH}.zip -d / && \ - rm -rf /${GITHUB_BRANCH}.zip && \ - mv /dspace-angular-${GITHUB_BRANCH} /dspace-angular +RUN git clone --depth 1 --branch ${GITHUB_BRANCH} https://github.com/mlibrary/dspace-angular.git /dspace-angular diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..09a6fe7 --- /dev/null +++ b/Makefile @@ -0,0 +1,84 @@ +.PHONY: build ensure-source up up-all down clean rebuild logs wait test help + +## Default target +.DEFAULT_GOAL := help + +## Build the shared source image and all compose service images. +## Run this on first setup and whenever the source branch changes. +## +## The GITHUB_BRANCH shell variable selects which mlibrary fork branch to clone +## inside the source image (default: umich). Override at the command line: +## GITHUB_BRANCH=my-branch make build +## +## In GitHub Actions CI the same value is carried by SOURCE_BRANCH (because the +## Actions runner reserves all GITHUB_* env var names) and forwarded to Docker +## as --build-arg GITHUB_BRANCH=${SOURCE_BRANCH}. The Dockerfile is unchanged. +build: + docker build -t dspace-containerization-source \ + --build-arg GITHUB_BRANCH=$${GITHUB_BRANCH:-umich} . + docker compose build + +## Build the source image only when it is not already present locally. +## Called automatically by 'up' so you can never accidentally start with a missing source image. +ensure-source: + @docker image inspect dspace-containerization-source:latest > /dev/null 2>&1 \ + && echo "Source image already exists; skipping build." \ + || (echo "Source image not found; building now..." && \ + docker build -t dspace-containerization-source \ + --build-arg GITHUB_BRANCH=$${GITHUB_BRANCH:-umich} .) + +## Start the core services (db, solr, backend, frontend) in the background. +## Builds the source image first if it is not already present. +up: ensure-source + docker compose up -d + +## Start core + all optional services (apache, express). +up-all: ensure-source + docker compose --profile optional up -d + +## Stop and remove containers (volumes are preserved). +down: + docker compose down + +## Stop and remove containers AND all named volumes (full clean: destroys data). +clean: + docker compose down -v --rmi local + docker rmi -f dspace-containerization-source 2>/dev/null || true + +## Rebuild all images from scratch and restart core services. +rebuild: clean build up + +## Show logs for all running services (Ctrl-C to exit). +logs: + docker compose logs -f + +## Wait for all core services to be healthy (backend, solr, frontend). +## Polls every 5 s; times out after MAX_WAIT seconds (default 300). +wait: + @bash tests/wait-for-stack.sh + +## Run the smoke-test suite against the running local stack. +## Ensures the source image exists, starts the stack, waits for readiness, then runs tests. +test: up wait + @bash tests/smoke.sh + +## Show this help message. +help: + @echo "" + @echo "dspace-containerization: local dev Makefile" + @echo "" + @echo "Usage: make " + @echo "" + @echo " build Build source image + all compose service images" + @echo " ensure-source Build source image only if not already present" + @echo " up Start core services (db, solr, backend, frontend)" + @echo " up-all Start core + optional services (apache, express)" + @echo " down Stop containers (volumes preserved)" + @echo " clean Stop containers and delete volumes + images" + @echo " rebuild Full clean, build, and up" + @echo " logs Tail logs for all services" + @echo " wait Wait for all services to be healthy" + @echo " test Ensure source, start stack, wait, run smoke tests" + @echo " help Show this message" + @echo "" + diff --git a/README.md b/README.md index cb860bf..0519b0f 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,172 @@ # dspace-containerization -University of Michigan Library containerization of [DSpace](https://dspace.lyrasis.org/) +Containerization and deployment infrastructure for [Deep Blue Documents](https://deepblue.lib.umich.edu/), the University of Michigan Library's institutional repository, built on [DSpace 7+](https://dspace.lyrasis.org/). + +## For AI Coding Agents + +> **If you are an AI coding agent (GitHub Copilot, Claude, Cursor, or similar), read [`AGENTS.md`](AGENTS.md) before taking any action in this repository.** +> It contains mandatory guidelines for CLI usage, task tracking, and Markdown formatting that apply to every agent session. + ## Overview -A source image is created by pulling source code from the library's forks of DSpace: https://github.com/mlibrary/dspace-angular and https://github.com/mlibrary/DSpace. The source image is then used to create the frontend, backend, and solr images. These images, along with a database image, are then configured and deployed to create an instance of the DSpace application. +This repository is the source of truth for building and deploying **Deep Blue Documents** — U-M Library's DSpace-based institutional repository. It produces Docker images from the library's own forks of DSpace ([`mlibrary/DSpace`](https://github.com/mlibrary/DSpace)) and the Angular frontend ([`mlibrary/dspace-angular`](https://github.com/mlibrary/dspace-angular)), layering U-M-specific configuration and tooling on top of upstream DSpace. + +A shared **source image** is built first by cloning those forks. It is then consumed by the `frontend`, `backend`, and `solr` service images. Together with a `db` image, these form a complete DSpace stack that can be run locally via Docker Compose or deployed remotely to Kubernetes / OpenShift. + +There are two deployment contexts: +- **Local** — Docker Desktop; images built with `docker compose build`, deployed with `docker compose up -d`. +- **Remote** — Kubernetes/OpenShift cluster; images built by GitHub Actions, stored in GitHub Packages, and deployed by applying the YAML manifests in [`dspace/`](dspace) (Kubernetes) or [`dspace-uid/`](dspace-uid) (OpenShift). + +It is recommended to get the stack running locally via Docker Compose before attempting a remote deployment. + +## Branching Policy + +### This repository (`mlibrary/dspace-containerization`) -Essentially there are two, for lack of a better word, contexts: local and remote. Local will be used to refer to your local development environment, or more specifically, Docker Desktop. Remote will be used to refer a Kubernetes cluster. The primary differences between these two contexts being how images are built, where they are stored, and how they are deployed. Local images are built via the `docker compose build` command, stored locally in Docker Desktop, and deployed via `docker compose up -d` command. Remote images are built via GitHub Actions, stored remotely in GitHub Packages, and deployed to [Kubernetes](https://github.com/mlibrary/dspace-containerization/blob/main/dspace) ([OpenShift](https://github.com/mlibrary/dspace-containerization/blob/main/dspace-uid)) typically using `kubectl` (`oc`) to apply the appropriate deployment yaml files. +The canonical branch is **`main`**. All development work and pull requests target `main`. CI runs on direct pushes to `main` and on all PRs targeting `main`. + +### Source forks (`mlibrary/DSpace` and `mlibrary/dspace-angular`) + +These are forks of the official DSpace repositories. In each fork: +- **`main`** is kept in sync with upstream official DSpace — it is **never pushed to directly**. +- **`umich`** is the canonical development branch where U-M-specific changes live. It always pulls from `main` (to incorporate upstream updates) but never pushes back to `main`. + +The `GITHUB_BRANCH` build argument (default: `umich`) controls which branch of these forks is cloned when building the source image. In CI it is carried as `SOURCE_BRANCH` because GitHub Actions reserves all `GITHUB_*` variable names. + +## For other institutions + +> While this repository is configured for the University of Michigan's **Deep Blue Documents** service, it is designed to serve as a **reference architecture** for how to containerize and orchestrate a heavily customized DSpace 7+ environment using Docker Compose, Kubernetes, and OpenShift. +> +> **What is reusable:** the multi-stage Dockerfile patterns, `docker-compose.yml` service structure, Makefile workflow, smoke-test suite (`tests/`), and GitHub Actions CI pipeline (`.github/workflows/ci.yml`) are general-purpose and straightforward to adapt. +> +> **What is U-M-specific:** the source forks (`mlibrary/DSpace`, `mlibrary/dspace-angular`), the `GITHUB_BRANCH=umich` default, backend scripts in `backend/bin/`, and `backend/local.cfg`. +> +> To adapt this for your own institution, point `GITHUB_BRANCH` (or a fork of your own) at your customized DSpace source and replace `backend/local.cfg` with your own overrides. Note that `backend/local.cfg` is only copied into images built by the root `backend.dockerfile` (local dev and `ci.yml`); the `dspace/backend.dockerfile` used to build published production/staging images does **not** copy it — configuration for those environments is supplied at runtime via environment variables or mounted Kubernetes Secrets. -It is recommend that you first get an instance of DSpace running locally via `docker compose` prior to attempting to get an instance of DSpace running remotely in Kubernetes. ## Building and running locally -### login +### Quick Start +1. (Optional) Copy `.env.example` to `.env` and adjust build arguments as needed. +2. Build the shared **source image** (required once, and whenever the source branch changes): + ```shell + docker build -t dspace-containerization-source . + ``` + > The `frontend`, `backend`, and `solr` images depend on this image at build time. + > Use `make build` (see [Makefile](Makefile)) to build source + all compose services in one step. +3. Build the compose service images: + ```shell + docker compose build + ``` +4. Start the core services: + ```shell + docker compose up -d + ``` + > `db` and `solr` include healthchecks; `backend` will not start until both are healthy. + +### Optional Services +The `apache` and `express` services are not started by default. To include them: ```shell -docker login +docker compose --profile optional up -d ``` -### build +Or start a single optional service: ```shell -docker compose build +docker compose --profile optional up -d apache +docker compose --profile optional up -d express +``` + +### Service URLs +| URL | Container | Comments | +|-----------------------------------------|-----------|------------------------------------------------------------------------------| +| http://localhost:4000/ | frontend | Angular GUI (SSR app shell; Angular router handles `/home` etc. client-side) | +| jdbc:postgresql://localhost:5432/dspace | db | PostgreSQL (user: dspace, password: dspace) | +| http://localhost:8080/server | backend | Server API | +| http://localhost:8983/solr | solr | Solr GUI | +| http://localhost:8888/ | apache | Apache Web Server – optional (CGI stats scripts) | +| http://localhost:3000/metrics | express | Prometheus metrics endpoint – optional | + +### Build Arguments +Build arguments are read from `.env` (copy from `.env.example`): +``` +GITHUB_BRANCH=umich +DSPACE_VERSION=7.6 +JDK_VERSION=17 +DSPACE_UI_HOST=0.0.0.0 +DSPACE_REST_HOST=backend ``` -NOTES: +- `GITHUB_BRANCH` — branch in the mlibrary forks used to build the source image. +- `DSPACE_VERSION` — version suffix for DSpace Docker Hub images (e.g. `7.6` → image tag `dspace-7.6`). Use `7.6` here; the current upstream DSpace patch release targeted by this configuration is **7.6.0**. +- `JDK_VERSION` — Java version for the backend Tomcat image (must be `17`; JDK11 is no longer supported). The build uses `eclipse-temurin` images — the official successor to the deprecated `openjdk` Docker Hub images. +- `DSPACE_UI_HOST` — hostname the Angular SSR server binds to. Use `0.0.0.0` for local Docker development (Node.js 18+ resolves `localhost` to `::1`, breaking Docker port-mapping). Set to the public hostname for staging/production. +- `DSPACE_REST_HOST` — hostname the Angular SSR server (inside the frontend container) uses to reach the backend REST API over Docker's internal DNS. Use `backend` (the Docker service name) for local development. The browser-side Angular client re-uses the `dspaceServer` URL from the HAL root at runtime. -Build uses `umich` by default. To build with `issue-working`, use "--build-arg GITHUB_BRANCH=issue-working" +`docker-compose.yml` passes `DSPACE_VERSION` and `JDK_VERSION` automatically to the relevant service builds via `build.args`. -Build uses `dspace-7.6` by default. To build with 7_x, use "--build-arg DSPACE_VERSION=7_x" +### Notes +- Debugging ports (e.g., 8009, 9876) are not exposed by default. Add them to `docker-compose.yml` if needed. +- The `backend` service uses `depends_on` with `condition: service_healthy` for `db` and `solr`, and the `frontend` service waits for `backend` to be healthy, ensuring correct startup ordering without manual delays. +- Use `make` targets (see [Makefile](Makefile)) for common workflows: `make build`, `make up`, `make down`, `make clean`. +- **`backend/local.cfg`** disables OIDC authentication for local dev and supplies placeholder values for `ip.bioIPsRange1` / `ip.bioIPsRange2`. `OidcAuthenticationBean` is still instantiated by Spring even when removed from the authentication plugin sequence, and its initialisation path calls `String.split()` on those properties unconditionally — omitting them causes a `NullPointerException` that returns HTTP 500 on every `/server/api` endpoint and the actuator. This file is only copied into images built by the root `backend.dockerfile` (local dev and `ci.yml`). The `dspace/backend.dockerfile`, used to build the production/staging images published to `ghcr.io`, does **not** copy it at all. -Build uses `JDK11` by default. To build with JDK17, use "--build-arg JDK_VERSION=17" +## Integration Testing +A shell-based smoke test suite lives in [`tests/`](tests/). It requires only `bash` and `curl`. + +### Quick run (stack already up) +```shell +bash tests/smoke.sh +``` -### run -``` shell -docker compose up -d +### Full run (start → wait → test) +```shell +make test +``` +This is equivalent to: +```shell +make up # docker compose up -d +bash tests/wait-for-stack.sh # poll until backend/solr/frontend are ready +bash tests/smoke.sh # run all assertions ``` -### localhost -| URL | Container | Comments | -|-----------------------------------------|-----------|----------------------------------------------| -| http://localhost:4000/home | frontend | Angular GUI | -| jdbc:postgresql://localhost:5432/dspace | db | PostgreSQL (user: dspace, password: dspace) | -| http://localhost:8009/ | backend | debugging??? | -| http://localhost:8080/rest | backend | REST API (Deprecated) | -| http://localhost:8080/server | backend | Server API | -| http://localhost:8888/ | apache | Apache Web Server | -| http://localhost:8983/solr | solr | Solr GUI | -| http://localhost:9876/ | frontend | debugging??? | + +### What is tested + +| Layer | Endpoint | Assertion | +|------------------|------------------------------------|----------------------------------------------------------------------------| +| Backend REST API | `GET /server/api` | HTTP 200, HAL `_links` present | +| Backend REST API | `GET /server/api` | `dspaceVersion` and `dspaceServer` fields present | +| Backend REST API | `GET /server/api/core/communities` | HTTP 200 | +| Backend REST API | `GET /server/api/core/collections` | HTTP 200 | +| Backend REST API | `GET /server/api/authn/status` | HTTP 200, `"authenticated":false` | +| Backend Actuator | `GET /server/actuator/health` | `"status":"UP"` or `"UP_WITH_ISSUES"` | +| Solr | `GET /solr/admin/info/system` | HTTP 200, version info present | +| Solr | `GET /solr/admin/cores` | All four DSpace cores present (`authority`, `oai`, `search`, `statistics`) | +| Solr | `GET /solr/search/admin/ping` | HTTP 200 | +| Frontend | `GET /` | HTTP 200, no `ng-error` boundary | +| Frontend (SSR) | `GET /communities/` | HTTP 200, `ds-root` element present, `DSpace` title present | + +### CI (GitHub Actions) +The workflow [`.github/workflows/ci.yml`](.github/workflows/ci.yml) is the primary CI workflow. It runs automatically on: +- **Direct pushes to `main`** — validates the branch after a merge. +- **Pull requests targeting `main`** — validates every push to a PR branch before it lands. + +Feature branches that do not yet have an open PR targeting `main` will **not** trigger CI automatically. To run the full smoke-test suite against any branch manually, use the **`workflow_dispatch`** trigger from the GitHub Actions UI (or `gh workflow run ci.yml`) with optional `dspace_version`, `jdk_version`, and `source_branch` inputs. + +The workflow is scoped to the canonical `mlibrary/dspace-containerization` repository so fork runs do not consume runner minutes. + +Additional image-building workflows live alongside `ci.yml` and can be used to publish individual service images to GitHub Packages independently of the full stack test: + +| Workflow | Purpose | +|--------------------------------|--------------------------------------------------| +| `build-source-image.yml` | Builds and publishes the shared source image | +| `build-dspace-images.yml` | Builds frontend, backend, and solr images | +| `build-db-image.yml` | Builds the PostgreSQL db image | +| `build-apache-image.yml` | Builds the optional Apache image | +| `build-express-image.yml` | Builds the optional Express metrics image | +| `build-dspace-uid-images.yml` | OpenShift UID-safe variants of the DSpace images | +| `build-db-uid-image.yml` | OpenShift UID-safe db image | +| `build-apache-uid-image.yml` | OpenShift UID-safe Apache image | +| `delete-old-workflow-runs.yml` | Housekeeping – prunes stale workflow run history | + +> **Note on `GITHUB_BRANCH` vs `SOURCE_BRANCH`:** locally (Makefile / `.env`) the build arg is called `GITHUB_BRANCH` and is passed directly to `docker build`. In the CI workflow it is stored in an env var called `SOURCE_BRANCH` — because GitHub Actions reserves all variables prefixed with `GITHUB_` and will fail the job if one is set in an `env:` block — then forwarded to Docker as `--build-arg GITHUB_BRANCH=${SOURCE_BRANCH}`, so the `Dockerfile` and `Makefile` require no changes. ## References * https://dspace.lyrasis.org/ diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..539c82f --- /dev/null +++ b/TODO.md @@ -0,0 +1,36 @@ +# TODO + + +## Scrub Deleted `.cpt` Files from Git History +The five encrypted config files (`backend/config/*.cpt`) and the production log +(`backend/logs/dspace.log.2023-11-01`) were deleted from the working tree in +`DEEPBLUE-466/Refactor`, but they remain in prior commits on `main` after the +PR merges. If any `.cpt` file ever held real credentials (even rotated ones), +they should be scrubbed from history entirely. This is a separate post-merge +cleanup PR/operation — it must not block the `DEEPBLUE-466/Refactor` merge. + +- [ ] After `DEEPBLUE-466/Refactor` merges, verify with the team that the `.cpt` passphrase has been rotated and is no longer in active use +- [ ] Create a dedicated cleanup branch (e.g. `chore/scrub-cpt-history`) +- [ ] Install `git-filter-repo` if not already present: `pip install git-filter-repo` or `brew install git-filter-repo` +- [ ] Rewrite history to remove all `.cpt` files and the production log: `git filter-repo --path backend/config/ --path backend/logs/ --invert-paths` +- [ ] Force-push the rewritten `main`: `git push --force origin main` +- [ ] Notify all team members to re-clone or reset their local copies: `git fetch --all && git reset --hard origin/main` +- [ ] Update any open PRs that were based on the old history (rebase onto the rewritten `main`) +- [ ] Verify the current state of the project achieves the task goal +- [ ] Verify with the developer that the task is complete + +## Fix Demo Backend: Solr Race Condition on Startup +The `demo` backend pod's Spring Boot context failed to initialize on 2026-04-15 +because Solr was still loading when the backend started. Tomcat deployed the +`/server` webapp but Spring never finished — all `/server/api` requests return +a Tomcat 404 HTML page instead of a HAL JSON response, causing the SSR frontend +to throw `Error: undefined doesn't contain the link systemwidealerts` and return +HTTP 500 on `/documents`. + +- [ ] Restart the `backend` deployment in the `demo` namespace to recover the running pod (Solr is now fully up): `kubectl rollout restart deployment/backend -n demo` +- [ ] Confirm `/server/api` returns HTTP 200 with a HAL JSON response after the restart +- [ ] Add a long-term fix: an `initContainer` or startup `readinessProbe` on the backend that waits for Solr to be ready before Spring Boot begins initializing +- [ ] Verify the current state of the project achieves the task goal +- [ ] Verify with the developer that the task is complete + + diff --git a/backend.dockerfile b/backend.dockerfile index 0f02444..de91683 100644 --- a/backend.dockerfile +++ b/backend.dockerfile @@ -2,14 +2,13 @@ # To build with 7_x, use "--build-arg DSPACE_VERSION=7_x" ARG DSPACE_VERSION=7.6 -# This Dockerfile uses JDK11 by default, but has also been tested with JDK17. -# To build with JDK17, use "--build-arg JDK_VERSION=17" -ARG JDK_VERSION=11 +# This Dockerfile uses JDK17 (eclipse-temurin). +ARG JDK_VERSION=17 -FROM dspace-containerization-source as source +FROM dspace-containerization-source AS source # Step 1 - Run Maven Build -FROM dspace/dspace-dependencies:dspace-${DSPACE_VERSION} as mvn_build +FROM dspace/dspace-dependencies:dspace-${DSPACE_VERSION} AS mvn_build ARG TARGET_DIR=dspace-installer WORKDIR /app @@ -29,23 +28,24 @@ RUN mvn --no-transfer-progress package -Pdspace-rest && \ mvn clean # Step 2 - Run Ant Deploy -FROM openjdk:${JDK_VERSION}-slim as ant_build +# eclipse-temurin is the official successor to the deprecated openjdk Docker Hub images. +FROM eclipse-temurin:${JDK_VERSION}-jdk AS ant_build ARG TARGET_DIR=dspace-installer # COPY the /install directory from 'build' container to /dspace-src in this container COPY --from=mvn_build /install /dspace-src WORKDIR /dspace-src # Create the initial install deployment using ANT -ENV ANT_VERSION 1.10.12 -ENV ANT_HOME /tmp/ant-$ANT_VERSION -ENV PATH $ANT_HOME/bin:$PATH +ENV ANT_VERSION=1.10.12 +ENV ANT_HOME=/tmp/ant-$ANT_VERSION +ENV PATH=$ANT_HOME/bin:$PATH # Need wget to install ant -RUN apt-get update \ - && apt-get install -y --no-install-recommends wget \ - && apt-get purge -y --auto-remove \ +# Download and install 'ant', then remove wget once it is no longer needed +RUN apt-get -o Acquire::Retries=3 update \ + && apt-get -o Acquire::Retries=3 install -y --no-install-recommends wget \ + && mkdir $ANT_HOME \ + && wget -qO- "https://archive.apache.org/dist/ant/binaries/apache-ant-$ANT_VERSION-bin.tar.gz" | tar -zx --strip-components=1 -C $ANT_HOME \ + && apt-get purge -y --auto-remove wget \ && rm -rf /var/lib/apt/lists/* -# Download and install 'ant' -RUN mkdir $ANT_HOME && \ - wget -qO- "https://archive.apache.org/dist/ant/binaries/apache-ant-$ANT_VERSION-bin.tar.gz" | tar -zx --strip-components=1 -C $ANT_HOME # Run necessary 'ant' deploy scripts RUN ant init_installation update_configs update_code update_webapps @@ -58,9 +58,9 @@ ENV TOMCAT_INSTALL=/usr/local/tomcat COPY --from=ant_build /dspace $DSPACE_INSTALL # Install additional libraries needed for backend scripts -RUN apt update; \ - apt install -y --no-install-recommends \ - ccrypt \ +RUN apt-get -o Acquire::Retries=3 update \ + && apt-get -o Acquire::Retries=3 upgrade -y \ + && apt-get -o Acquire::Retries=3 install -y --no-install-recommends \ libcgi-pm-perl \ libdbi-perl \ libio-all-lwp-perl \ @@ -82,7 +82,9 @@ RUN apt update; \ ruby-dev \ pipx \ iputils-ping \ - mailutils + mailutils \ + curl \ + && rm -rf /var/lib/apt/lists/* RUN gem install uri pry net-http json RUN pipx install awscli @@ -92,7 +94,12 @@ RUN mkdir /root/.emacs.d # Install additional backend scripts COPY ./backend/init.el /root/.emacs.d/init.el COPY ./backend/bin/ $DSPACE_INSTALL/bin/ -COPY ./backend/logs/ $DSPACE_INSTALL/logs/ +COPY ./backend/local.cfg $DSPACE_INSTALL/config/local.cfg + +# The logs directory is already created by `ant init_installation` above, +# so the explicit mkdir is redundant. Kept here (commented out) as a reminder +# in case the ant install layout ever changes. +# RUN mkdir -p $DSPACE_INSTALL/logs # Enable the AJP connector in Tomcat's server.xml # NOTE: secretRequired="false" should only be used when AJP is NOT accessible from an external network. But, secretRequired="true" isn't supported by mod_proxy_ajp until Apache 2.5 @@ -102,7 +109,7 @@ EXPOSE 8080 8009 # Give java extra memory (2GB) ENV JAVA_OPTS=-Xmx2000m # Set up debugging -ENV CATALINA_OPTS=-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:8000 +ENV CATALINA_OPTS="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=*:8000" # Link the DSpace 'server' webapp into Tomcat's webapps directory. # This ensures that when we start Tomcat, it runs from /server path (e.g. http://localhost:8080/server/) diff --git a/backend/config/demo.dspace.cfg.cpt b/backend/config/demo.dspace.cfg.cpt deleted file mode 100644 index 20f0893..0000000 Binary files a/backend/config/demo.dspace.cfg.cpt and /dev/null differ diff --git a/backend/config/demo.dspace.cfg.cpt.backupFeb10 b/backend/config/demo.dspace.cfg.cpt.backupFeb10 deleted file mode 100644 index 3a80bf6..0000000 Binary files a/backend/config/demo.dspace.cfg.cpt.backupFeb10 and /dev/null differ diff --git a/backend/config/production.dspace.cfg.cpt b/backend/config/production.dspace.cfg.cpt deleted file mode 100644 index 3a80bf6..0000000 Binary files a/backend/config/production.dspace.cfg.cpt and /dev/null differ diff --git a/backend/config/staging.dspace.cfg.cpt b/backend/config/staging.dspace.cfg.cpt deleted file mode 100644 index 3a80bf6..0000000 Binary files a/backend/config/staging.dspace.cfg.cpt and /dev/null differ diff --git a/backend/config/workshop.dspace.cfg.cpt b/backend/config/workshop.dspace.cfg.cpt deleted file mode 100644 index 3a80bf6..0000000 Binary files a/backend/config/workshop.dspace.cfg.cpt and /dev/null differ diff --git a/backend/local.cfg b/backend/local.cfg new file mode 100644 index 0000000..af1fb4e --- /dev/null +++ b/backend/local.cfg @@ -0,0 +1,25 @@ +# local.cfg — local development overrides (never commit secrets here) +# +# DSpace loads this file last, so any property here overrides dspace.cfg. +# This file is copied into the image by the root backend.dockerfile (used by +# docker-compose for local development and the ci.yml smoke-test workflow). +# dspace/backend.dockerfile (used to build production/staging images pushed to +# ghcr.io) does NOT copy backend/config/ at all — production/staging +# configuration is supplied at runtime via environment variables or mounted +# Kubernetes Secrets. + +# Disable OIDC authentication for local dev. +# authentication.cfg enables OidcAuthentication by default, but OidcAuthenticationBean +# reads ip.bioIPsRange1/2 on EVERY request and crashes with NullPointerException if +# those properties are missing, and weblogin.lib.umich.edu is unavailable locally anyway. +plugin.sequence.org.dspace.authenticate.AuthenticationMethod = org.dspace.authenticate.PasswordAuthentication + +# OidcAuthenticationBean is still instantiated by Spring even when removed from the +# authentication plugin sequence above. Its initialisation / health-check path calls +# String.split() on the values of ip.bioIPsRange1 and ip.bioIPsRange2 unconditionally, +# so a NullPointerException propagates to every /server/api endpoint and the actuator +# when the properties are absent. Provide harmless non-routable placeholders so the +# bean has a non-null string to split while never matching any real request IP. +ip.bioIPsRange1 = 192.0.2.0/24 +ip.bioIPsRange2 = 192.0.2.0/24 + diff --git a/backend/logs/dspace.log.2023-11-01 b/backend/logs/dspace.log.2023-11-01 deleted file mode 100644 index ea1d491..0000000 --- a/backend/logs/dspace.log.2023-11-01 +++ /dev/null @@ -1,1000 +0,0 @@ -2023-11-01 23:59:46,000 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:46,000 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:46,001 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:46,001 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:46,001 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:46,018 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Prepared to send url to tracker URL: https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=5.255.231.190&req_dat=Mozilla%2F5.0+%28compatible%3B+YandexBot%2F3.0%3B+%2Bhttp%3A%2F%2Fyandex.com%2Fbots%29&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F151123&rfr_dat=&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A46Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F151123&rft_dat=Investigation -2023-11-01 23:59:46,060 INFO org.dspace.app.xmlui.aspect.artifactbrowser.ItemViewer @ anonymous:session_id=6A98A0AED90F21DEB0D09078F54AD879:ip_addr=3.236.120.73:referer=null:view_item_details:collection=OUTSIDE Dissertations and Theses (Ph.D. and Master's) (Research Collections), Environment and Sustainability, School for (SEAS/SNRE) (Research Collections), handle=2027.42/88163 -2023-11-01 23:59:46,106 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:46,106 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:46,106 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:46,106 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:46,108 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:46,533 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=2f5409fe-d5fc-4684-a8ad-54d1fffcdf37) policies. -2023-11-01 23:59:46,579 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=489e7340-5288-40d4-bdd5-b3e86fac2f13) policies. -2023-11-01 23:59:46,618 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=50a9bff7-b39c-414f-818d-5ce14a6cf916) policies. -2023-11-01 23:59:46,655 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=5570338d-1f87-44cf-ba80-9ac673fbc998) policies. -2023-11-01 23:59:46,692 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=f97c87aa-0b6a-4927-827f-e724e548e23a) policies. -2023-11-01 23:59:46,727 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=74ffdc04-413b-40a3-8bf9-960cb7807223) policies. -2023-11-01 23:59:46,764 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=1f89d209-6eae-434b-8c4a-f9173ebae2bb) policies. -2023-11-01 23:59:46,772 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Successfully posted https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=5.255.231.190&req_dat=Mozilla%2F5.0+%28compatible%3B+YandexBot%2F3.0%3B+%2Bhttp%3A%2F%2Fyandex.com%2Fbots%29&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F151123&rfr_dat=&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A46Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F151123&rft_dat=Investigation on Wed Nov 01 23:59:46 EDT 2023 -2023-11-01 23:59:46,772 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=F5C9DE487F4F0D99AE62291B85C446A7:ip_addr=5.255.231.190:referer=null:view_item:handle=2027.42/151123 -2023-11-01 23:59:46,777 INFO org.dspace.app.xmlui.aspect.general.WithdrawnSelector @ WITHDRAW: Withdrawn Reason selector processing -2023-11-01 23:59:46,777 INFO org.dspace.app.xmlui.aspect.general.WithdrawnSelector @ WITHDRAW: Finding item -2023-11-01 23:59:46,777 INFO org.dspace.app.xmlui.aspect.general.WithdrawnSelector @ WITHDRAW: Item found -2023-11-01 23:59:46,779 INFO org.dspace.app.xmlui.aspect.general.WithdrawnSelector @ WITHDRAW: Done looking for metadata -2023-11-01 23:59:46,800 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=6a6ba301-8da6-4d13-8b2a-914cc829e1bf) policies. -2023-11-01 23:59:46,830 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=e2d9738f-e542-468d-bd54-9ca08592f54f) policies. -2023-11-01 23:59:46,862 INFO org.dspace.rest.BitstreamResource @ Reading bitstream(id=38e05ad5-2f84-4e6b-9eb2-70bd5af464b0) policies. -2023-11-01 23:59:47,174 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:47,174 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:47,174 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:47,175 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,175 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,176 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,176 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,176 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:47,185 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:47,185 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:47,211 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=4DEFF947BE3B99BE0A6D6EF9F19203EF:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=f7116a20-fa70-437a-b7f9-6b89a9019ca4 -2023-11-01 23:59:47,211 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=4DEFF947BE3B99BE0A6D6EF9F19203EF:ip_addr=52.233.106.29:referer=null:handle=2027.42/64039:view_bitstream_details:filename=88702.pdf -2023-11-01 23:59:47,212 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed 88702.pdf//l1/dspace/repository/prod/upload_temp/88702.pdf -2023-11-01 23:59:47,212 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=4DEFF947BE3B99BE0A6D6EF9F19203EF:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=f7116a20-fa70-437a-b7f9-6b89a9019ca4 -2023-11-01 23:59:47,231 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:47,231 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 174.164.8.95 -2023-11-01 23:59:47,231 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 174.164.8.95 -2023-11-01 23:59:47,231 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,232 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,232 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,232 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,232 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:47,608 INFO org.dspace.app.xmlui.aspect.discovery.AbstractSearch @ anonymous:session_id=C283F12EF8EE71694CA4D582DF17C32B:ip_addr=174.164.8.95:referer=https://deepblue.lib.umich.edu/handle/2027.42/39366:search:collection_id=c5a42028-499d-4e85-9fdc-dc71e2baca26,query="loveless",results=(0,0,0) -2023-11-01 23:59:47,646 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,646 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,646 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,647 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,650 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,651 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,651 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,651 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,651 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,654 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,656 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,656 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,656 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,656 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,656 INFO org.dspace.app.xmlui.aspect.artifactbrowser.ItemViewer @ anonymous:session_id=F5C9DE487F4F0D99AE62291B85C446A7:ip_addr=5.255.231.190:referer=null:view_item_details:collection=OUTSIDE Carl M. Levin papers (Archival Collections -- Bentley Library), handle=2027.42/151123 -2023-11-01 23:59:47,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,678 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,678 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,678 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,680 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,681 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,687 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,687 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,687 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,688 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,689 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,690 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,690 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,690 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,691 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,692 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,693 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,693 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,693 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,694 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,695 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,721 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,721 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,721 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,721 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,731 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,731 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,733 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,733 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,733 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,737 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,737 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,738 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,738 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,738 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,744 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,744 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,744 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,748 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,748 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,749 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,749 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,749 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,749 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,750 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,754 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,754 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,754 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,758 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,758 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,760 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,760 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,760 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,762 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,762 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,764 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,764 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,764 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,764 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,764 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,770 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,770 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,770 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:47,770 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:47,774 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 40.77.167.7 -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 40.77.167.7 -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,827 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:47,828 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,828 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:47,832 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:47,832 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:47,850 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=78A801FD2F7A4D171DC1CB36BC0B3E56:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=c77933c2-ad9c-4d2d-8792-a8250be4b9ce -2023-11-01 23:59:47,850 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=78A801FD2F7A4D171DC1CB36BC0B3E56:ip_addr=52.233.106.29:referer=null:handle=2027.42/100339:view_bitstream_details:filename=mmi12378.pdf -2023-11-01 23:59:47,851 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed mmi12378.pdf/null -2023-11-01 23:59:47,851 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=78A801FD2F7A4D171DC1CB36BC0B3E56:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=c77933c2-ad9c-4d2d-8792-a8250be4b9ce -2023-11-01 23:59:47,924 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:47,924 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 3.236.120.73 -2023-11-01 23:59:47,924 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 3.236.120.73 -2023-11-01 23:59:47,924 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,925 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,925 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:47,925 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:47,925 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:47,931 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:47,931 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:47,974 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=21CFFE673DD905FA13CF35F9CBA89049:ip_addr=3.236.120.73:referer=null:view_bitstream:bitstream_id=d75e6d07-fd90-4815-9209-fa2bccff3441 -2023-11-01 23:59:47,974 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=21CFFE673DD905FA13CF35F9CBA89049:ip_addr=3.236.120.73:referer=null:handle=2027.42/88163:view_bitstream_details:filename=Final Thesis_Stephanie NT Aselage.pdf -2023-11-01 23:59:47,981 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Prepared to send url to tracker URL: https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=3.236.120.73&req_dat=Unpaywall+%28http%3A%2F%2Funpaywall.org%2F%3B+mailto%3Ateam%40impactstory.org%29&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F88163&rfr_dat=&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A47Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fbitstream%2Fhandle%2F2027.42%2F88163%2FFinal%2520Thesis_Stephanie%2520NT%2520Aselage.pdf%3Fsequence%3D1&rft_dat=Request -2023-11-01 23:59:48,511 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:48,511 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:48,511 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:48,512 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:48,513 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:48,513 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:48,513 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:48,513 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:48,524 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:48,524 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:48,562 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=BD67DE1328F0CF72F1F8797CDDC5B487:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=1ba1af1a-5ba8-4ad6-8a6a-26b29ebbc93a -2023-11-01 23:59:48,562 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=BD67DE1328F0CF72F1F8797CDDC5B487:ip_addr=52.233.106.29:referer=null:handle=2027.42/136424:view_bitstream_details:filename=jgrf20654_am.pdf -2023-11-01 23:59:48,563 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed jgrf20654_am.pdf/null -2023-11-01 23:59:48,563 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=BD67DE1328F0CF72F1F8797CDDC5B487:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=1ba1af1a-5ba8-4ad6-8a6a-26b29ebbc93a -2023-11-01 23:59:48,625 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Successfully posted https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=3.236.120.73&req_dat=Unpaywall+%28http%3A%2F%2Funpaywall.org%2F%3B+mailto%3Ateam%40impactstory.org%29&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F88163&rfr_dat=&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A47Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fbitstream%2Fhandle%2F2027.42%2F88163%2FFinal%2520Thesis_Stephanie%2520NT%2520Aselage.pdf%3Fsequence%3D1&rft_dat=Request on Wed Nov 01 23:59:48 EDT 2023 -2023-11-01 23:59:48,625 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=21CFFE673DD905FA13CF35F9CBA89049:ip_addr=3.236.120.73:referer=null:view_bitstream:bitstream_id=d75e6d07-fd90-4815-9209-fa2bccff3441 -2023-11-01 23:59:50,005 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:50,005 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:50,005 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:50,006 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:50,006 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:50,007 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:50,007 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:50,007 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:50,017 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:50,017 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:50,028 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=81107413658CEEB472AA023E8FDE4098:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=ab28f81c-f1ed-4ff4-b471-4ce9498cb15c -2023-11-01 23:59:50,028 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=81107413658CEEB472AA023E8FDE4098:ip_addr=52.233.106.29:referer=null:handle=2027.42/7500:view_bitstream_details:filename=bad1971.0001.001.pdf -2023-11-01 23:59:50,029 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed bad1971.0001.001.pdf/null -2023-11-01 23:59:50,029 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=81107413658CEEB472AA023E8FDE4098:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=ab28f81c-f1ed-4ff4-b471-4ce9498cb15c -2023-11-01 23:59:50,446 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:50,447 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:50,447 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:50,447 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:50,448 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:50,448 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:50,448 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:50,448 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:50,495 INFO org.dspace.browse.BrowseEngine @ anonymous:session_id=BF51C18C1C054C73421CAB015794EADC:ip_addr=52.233.106.29:referer=null:browse_by_item: -2023-11-01 23:59:50,548 INFO org.dspace.app.xmlui.aspect.artifactbrowser.ConfigurableBrowse @ anonymous:session_id=BF51C18C1C054C73421CAB015794EADC:ip_addr=52.233.106.29:referer=null:browse:org.dspace.app.xmlui.utils.DSpaceValidity@43acb546 -2023-11-01 23:59:50,651 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:50,651 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:50,651 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:50,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:50,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:51,253 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:51,253 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 66.249.69.227 -2023-11-01 23:59:51,253 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 66.249.69.227 -2023-11-01 23:59:51,253 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:51,254 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:51,254 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:51,254 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:51,254 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:51,258 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:51,258 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:51,348 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=16C45E376E28182E569EC6D8D84A6C90:ip_addr=66.249.69.227:referer=null:view_bitstream:bitstream_id=75af3ba6-79f1-4281-be11-d0daba4080a3 -2023-11-01 23:59:51,348 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=16C45E376E28182E569EC6D8D84A6C90:ip_addr=66.249.69.227:referer=null:handle=2027.42/168381:view_bitstream_details:filename=jdd12353.pdf -2023-11-01 23:59:51,348 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.5993.117 Mobile Safari/537.36 (compatible; GoogleOther)) accessed jdd12353.pdf/null -2023-11-01 23:59:51,349 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=16C45E376E28182E569EC6D8D84A6C90:ip_addr=66.249.69.227:referer=null:view_bitstream:bitstream_id=75af3ba6-79f1-4281-be11-d0daba4080a3 -2023-11-01 23:59:51,764 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:51,764 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:51,764 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:51,765 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:51,765 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:51,766 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:51,766 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:51,766 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:51,778 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:51,778 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:51,795 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=24C0626398CD6AD97368F5EB6ABA8012:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=b061d3ca-b900-429a-944e-655877a62b34 -2023-11-01 23:59:51,795 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=24C0626398CD6AD97368F5EB6ABA8012:ip_addr=52.233.106.29:referer=null:handle=2027.42/5435:view_bitstream_details:filename=bac4221.0001.001.pdf -2023-11-01 23:59:51,796 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed bac4221.0001.001.pdf/null -2023-11-01 23:59:51,796 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=24C0626398CD6AD97368F5EB6ABA8012:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=b061d3ca-b900-429a-944e-655877a62b34 -2023-11-01 23:59:52,663 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:52,663 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.167.144.201 -2023-11-01 23:59:52,663 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.167.144.201 -2023-11-01 23:59:52,664 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:52,664 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:52,664 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:52,664 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:52,664 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:52,671 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:52,671 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:52,684 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=21A3785E0CF3AAFED385BC2E5576F3CD:ip_addr=52.167.144.201:referer=null:view_bitstream:bitstream_id=2abc7a1a-5cff-4fb6-84be-541f65ef4958 -2023-11-01 23:59:52,684 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=21A3785E0CF3AAFED385BC2E5576F3CD:ip_addr=52.167.144.201:referer=null:handle=2027.42/164446:view_bitstream_details:filename=Mitigation_and_Prevention_of_Lunar_Dust_on_NASA_Artemis_xEMU_Spacesuits.pdf -2023-11-01 23:59:52,685 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/103.0.5060.134 Safari/537.36) accessed Mitigation_and_Prevention_of_Lunar_Dust_on_NASA_Artemis_xEMU_Spacesuits.pdf/null -2023-11-01 23:59:52,685 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=21A3785E0CF3AAFED385BC2E5576F3CD:ip_addr=52.167.144.201:referer=null:view_bitstream:bitstream_id=2abc7a1a-5cff-4fb6-84be-541f65ef4958 -2023-11-01 23:59:52,825 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:52,825 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:52,825 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:52,825 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:52,825 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:52,826 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:52,826 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:52,826 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:52,832 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:52,832 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:52,880 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=60284F2BF8D7C4B91873B038B05CF39C:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=916ee2a3-705b-41f7-9df4-b7207ac12a9d -2023-11-01 23:59:52,880 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=60284F2BF8D7C4B91873B038B05CF39C:ip_addr=52.233.106.29:referer=null:handle=2027.42/86992:view_bitstream_details:filename=21113_ftp.pdf -2023-11-01 23:59:52,880 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed 21113_ftp.pdf/null -2023-11-01 23:59:52,881 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=60284F2BF8D7C4B91873B038B05CF39C:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=916ee2a3-705b-41f7-9df4-b7207ac12a9d -2023-11-01 23:59:52,957 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:52,958 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 66.249.69.226 -2023-11-01 23:59:52,958 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 66.249.69.226 -2023-11-01 23:59:52,958 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:52,958 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:52,958 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:52,959 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:52,959 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:53,012 INFO org.dspace.browse.BrowseEngine @ anonymous:session_id=232D41F4EC6C20F4A08478F98D8AAD3D:ip_addr=66.249.69.226:referer=null:browse_by_item: -2023-11-01 23:59:53,025 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:53,025 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 213.180.203.61 -2023-11-01 23:59:53,025 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 213.180.203.61 -2023-11-01 23:59:53,026 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:53,026 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:53,026 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:53,026 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:53,026 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:53,133 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:53,133 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 107.178.200.200 -2023-11-01 23:59:53,133 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 107.178.200.200 -2023-11-01 23:59:53,133 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:53,133 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:53,134 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:53,134 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:53,134 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:53,139 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:53,139 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:53,149 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=356B6FC58F668D678DB861C29AD7091A:ip_addr=107.178.200.200:referer=:view_bitstream:bitstream_id=21a4a3cb-41f0-40de-aba4-2cc5761a2fc2 -2023-11-01 23:59:53,149 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=356B6FC58F668D678DB861C29AD7091A:ip_addr=107.178.200.200:referer=:handle=2027.42/77829:view_bitstream_details:filename=krispell_2.pdf -2023-11-01 23:59:53,156 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Prepared to send url to tracker URL: https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=107.178.200.200&req_dat=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F108.0.0.0+Safari%2F537.36+Edg%2F108.0.1418.42%27&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F77829&rfr_dat=&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A53Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fbitstream%2Fhandle%2F2027.42%2F77829%2Fkrispell_2.pdf%3Fsequence%3D1&rft_dat=Request -2023-11-01 23:59:53,173 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:53,173 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 174.164.8.95 -2023-11-01 23:59:53,173 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 174.164.8.95 -2023-11-01 23:59:53,174 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:53,174 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:53,174 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:53,174 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:53,174 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:53,487 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:53,487 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:53,487 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:53,488 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:53,489 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:53,489 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:53,489 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:53,489 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:53,498 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:53,498 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:53,536 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=348ABD1FF52032B66A465077DC0BF0B0:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=1b88deb2-7840-45a9-8ffa-c22871f99f59 -2023-11-01 23:59:53,536 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=348ABD1FF52032B66A465077DC0BF0B0:ip_addr=52.233.106.29:referer=null:handle=2027.42/78850:view_bitstream_details:filename=ikejiri_1.pdf -2023-11-01 23:59:53,537 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed ikejiri_1.pdf/null -2023-11-01 23:59:53,538 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=348ABD1FF52032B66A465077DC0BF0B0:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=1b88deb2-7840-45a9-8ffa-c22871f99f59 -2023-11-01 23:59:53,646 INFO org.dspace.app.xmlui.aspect.discovery.AbstractSearch @ anonymous:session_id=C283F12EF8EE71694CA4D582DF17C32B:ip_addr=174.164.8.95:referer=https://deepblue.lib.umich.edu/handle/2027.42/39366/discover:search:collection_id=c5a42028-499d-4e85-9fdc-dc71e2baca26,query="khan",results=(0,0,0) -2023-11-01 23:59:53,699 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,699 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,699 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,705 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,707 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,707 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,707 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,711 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,713 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,713 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,713 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,716 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,718 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,718 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,718 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,718 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,722 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,722 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,722 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,722 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,731 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,731 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,731 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,731 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,731 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,737 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,737 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,737 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,737 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,737 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,746 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,748 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,748 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:53,748 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:53,752 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,752 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:53,798 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Successfully posted https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=107.178.200.200&req_dat=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F108.0.0.0+Safari%2F537.36+Edg%2F108.0.1418.42%27&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F77829&rfr_dat=&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A53Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fbitstream%2Fhandle%2F2027.42%2F77829%2Fkrispell_2.pdf%3Fsequence%3D1&rft_dat=Request on Wed Nov 01 23:59:53 EDT 2023 -2023-11-01 23:59:53,798 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=356B6FC58F668D678DB861C29AD7091A:ip_addr=107.178.200.200:referer=:view_bitstream:bitstream_id=21a4a3cb-41f0-40de-aba4-2cc5761a2fc2 -2023-11-01 23:59:54,062 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:54,062 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:54,062 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:54,062 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:54,062 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:54,062 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:54,062 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:54,062 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:54,067 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:54,067 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:54,096 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=ED5803AA7A2603A20608D496D88C3320:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=8c7f1a1e-7867-451e-b7cd-388c1dd18b34 -2023-11-01 23:59:54,096 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=ED5803AA7A2603A20608D496D88C3320:ip_addr=52.233.106.29:referer=null:handle=2027.42/76818:view_bitstream_details:filename=AIAA-2004-1815-582.pdf -2023-11-01 23:59:54,097 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed AIAA-2004-1815-582.pdf/null -2023-11-01 23:59:54,097 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=ED5803AA7A2603A20608D496D88C3320:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=8c7f1a1e-7867-451e-b7cd-388c1dd18b34 -2023-11-01 23:59:54,539 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:54,539 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:54,539 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:54,539 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:54,540 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:54,540 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:54,540 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:54,540 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:54,994 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:54,994 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:54,994 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:54,995 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:54,995 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:54,995 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:54,995 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:54,995 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:55,323 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:55,324 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:55,324 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:55,324 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:55,324 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:55,324 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:55,324 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:55,324 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:55,326 INFO org.dspace.app.xmlui.aspect.artifactbrowser.ConfigurableBrowse @ anonymous:session_id=232D41F4EC6C20F4A08478F98D8AAD3D:ip_addr=66.249.69.226:referer=null:browse:org.dspace.app.xmlui.utils.DSpaceValidity@6ce8ce00 -2023-11-01 23:59:55,327 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:55,327 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:55,353 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=F7E4BB7BB619260D859A438E08FE9319:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=6f8bb2b8-4c98-4db6-853b-580f9ede5979 -2023-11-01 23:59:55,353 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=F7E4BB7BB619260D859A438E08FE9319:ip_addr=52.233.106.29:referer=null:handle=2027.42/147208:view_bitstream_details:filename=pmrjs168c.pdf -2023-11-01 23:59:55,353 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed pmrjs168c.pdf/null -2023-11-01 23:59:55,353 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=F7E4BB7BB619260D859A438E08FE9319:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=6f8bb2b8-4c98-4db6-853b-580f9ede5979 -2023-11-01 23:59:55,371 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,371 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,371 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,397 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,397 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,425 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,425 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,425 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,425 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,425 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,456 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,456 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,456 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,482 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,482 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,499 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,499 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,499 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,499 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,525 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,538 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,538 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,538 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,538 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,538 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,556 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,584 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,584 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,584 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,598 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:55,598 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 52.233.106.29 -2023-11-01 23:59:55,598 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 52.233.106.29 -2023-11-01 23:59:55,598 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:55,598 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:55,598 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:55,598 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:55,598 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:55,604 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:55,604 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:55,614 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,614 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,642 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=9A70F2412F020DD20A0AE8C2E9A9580D:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=bcfd1384-be1d-4c37-986b-25da37781e9b -2023-11-01 23:59:55,642 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=9A70F2412F020DD20A0AE8C2E9A9580D:ip_addr=52.233.106.29:referer=null:handle=2027.42/155924:view_bitstream_details:filename=asi24298_am.pdf -2023-11-01 23:59:55,643 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; GPTBot/1.0; +https://openai.com/gptbot)) accessed asi24298_am.pdf/null -2023-11-01 23:59:55,643 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=9A70F2412F020DD20A0AE8C2E9A9580D:ip_addr=52.233.106.29:referer=null:view_bitstream:bitstream_id=bcfd1384-be1d-4c37-986b-25da37781e9b -2023-11-01 23:59:55,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,684 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,703 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,703 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,703 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,728 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,728 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,825 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,825 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,825 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,855 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,855 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,871 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,871 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,871 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,889 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,889 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,909 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,909 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,909 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,909 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,926 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,946 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,946 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,946 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,973 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,973 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,991 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,991 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:55,991 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:55,991 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:55,998 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:55,998 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 95.108.213.246 -2023-11-01 23:59:55,998 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 95.108.213.246 -2023-11-01 23:59:55,999 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:55,999 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:55,999 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:55,999 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:55,999 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:56,012 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Prepared to send url to tracker URL: https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=95.108.213.246&req_dat=Mozilla%2F5.0+%28compatible%3B+YandexBot%2F3.0%3B+%2Bhttp%3A%2F%2Fyandex.com%2Fbots%29&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F151123&rfr_dat=&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A56Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F151123&rft_dat=Investigation -2023-11-01 23:59:56,023 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,042 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,042 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,042 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,043 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,059 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,078 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,078 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,078 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,078 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,106 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,130 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,130 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,131 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,147 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,147 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,163 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,163 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,163 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,190 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,190 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,207 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,207 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,207 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,207 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,234 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,250 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,250 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,250 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,250 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,309 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,328 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,328 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,328 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,345 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,345 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,364 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,364 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,364 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,364 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,390 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,408 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,408 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,408 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,436 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,436 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,453 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,453 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,453 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,453 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,471 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,493 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,511 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,511 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,511 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,530 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,530 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,550 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,550 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,550 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,550 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,566 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,585 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,585 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,585 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,612 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,612 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,632 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,632 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,632 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,649 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,649 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,666 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,666 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,666 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,666 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,666 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,711 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,711 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,711 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,743 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,743 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,762 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,762 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,762 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,762 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Successfully posted https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=95.108.213.246&req_dat=Mozilla%2F5.0+%28compatible%3B+YandexBot%2F3.0%3B+%2Bhttp%3A%2F%2Fyandex.com%2Fbots%29&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F151123&rfr_dat=&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A56Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F151123&rft_dat=Investigation on Wed Nov 01 23:59:56 EDT 2023 -2023-11-01 23:59:56,762 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=536A2F63C401DAB5391D3FD55767BE6B:ip_addr=95.108.213.246:referer=null:view_item:handle=2027.42/151123 -2023-11-01 23:59:56,765 INFO org.dspace.app.xmlui.aspect.general.WithdrawnSelector @ WITHDRAW: Withdrawn Reason selector processing -2023-11-01 23:59:56,765 INFO org.dspace.app.xmlui.aspect.general.WithdrawnSelector @ WITHDRAW: Finding item -2023-11-01 23:59:56,765 INFO org.dspace.app.xmlui.aspect.general.WithdrawnSelector @ WITHDRAW: Item found -2023-11-01 23:59:56,766 INFO org.dspace.app.xmlui.aspect.general.WithdrawnSelector @ WITHDRAW: Done looking for metadata -2023-11-01 23:59:56,788 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,813 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,826 INFO org.dspace.rest.CollectionsResource @ Reading collection(id=c5a42028-499d-4e85-9fdc-dc71e2baca26) items. -2023-11-01 23:59:56,828 INFO org.dspace.usage.LoggerUsageEventListener @ deepblue-elements@umich.edu::view_collection:collection_id=c5a42028-499d-4e85-9fdc-dc71e2baca26 -2023-11-01 23:59:56,831 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,831 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,831 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,860 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,860 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,875 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,875 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,875 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,900 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,900 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,927 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,927 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,927 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,947 INFO org.dspace.app.xmlui.aspect.artifactbrowser.ItemViewer @ anonymous:session_id=536A2F63C401DAB5391D3FD55767BE6B:ip_addr=95.108.213.246:referer=null:view_item_details:collection=OUTSIDE Carl M. Levin papers (Archival Collections -- Bentley Library), handle=2027.42/151123 -2023-11-01 23:59:56,952 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,952 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,964 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,964 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,964 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,970 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,970 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:56,970 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,972 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:56,973 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,988 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:56,988 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,015 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,015 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,015 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,015 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,030 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,046 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,046 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,046 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,046 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,061 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,076 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,093 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,093 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,093 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,117 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,117 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,133 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,133 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,133 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,159 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,159 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,174 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,174 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,174 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,200 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,200 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,216 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,216 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,216 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,216 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,232 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,247 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,263 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,263 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,263 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,289 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,289 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,322 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,322 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,322 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,322 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,349 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,357 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,358 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,358 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,382 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,382 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,389 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,389 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,389 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,389 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,404 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,410 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,410 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,410 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,425 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,425 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,429 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:57,429 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 1.145.155.59 -2023-11-01 23:59:57,429 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 1.145.155.59 -2023-11-01 23:59:57,430 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:57,430 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:57,430 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:57,430 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:57,430 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:57,431 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,431 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,431 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,435 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:57,435 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:57,455 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,456 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,459 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=5177492214206519F84B84F7C9188263:ip_addr=1.145.155.59:referer=https://www.google.com.au/:view_bitstream:bitstream_id=cbbd45f6-51d8-43aa-9fd7-019eacbb737e -2023-11-01 23:59:57,459 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=5177492214206519F84B84F7C9188263:ip_addr=1.145.155.59:referer=https://www.google.com.au/:handle=2027.42/83914:view_bitstream_details:filename=multiple_partners_are_associated_with_higher_testosterine_in_North_American_men_and_women.pdf -2023-11-01 23:59:57,462 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,462 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,462 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,462 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,465 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Prepared to send url to tracker URL: https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=1.145.155.59&req_dat=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+16_3_1+like+Mac+OS+X%29+AppleWebKit%2F605.1.15+%28KHTML%2C+like+Gecko%29+Version%2F16.3+Mobile%2F15E148+Safari%2F604.1&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F83914&rfr_dat=https%3A%2F%2Fwww.google.com.au%2F&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A57Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fbitstream%2Fhandle%2F2027.42%2F83914%2Fmultiple_partners_are_associated_with_higher_testosterine_in_North_American_men_and_women.pdf%3Fsequence%3D1&rft_dat=Request -2023-11-01 23:59:57,477 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,484 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,492 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,492 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,492 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,522 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,522 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,530 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,530 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,530 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,559 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,559 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,568 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,568 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,568 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,598 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,598 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,606 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,606 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,606 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,626 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,626 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,632 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,632 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,632 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,664 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,664 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,664 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,664 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,689 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,696 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,696 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,696 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,720 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,720 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,727 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,749 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,749 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,749 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,749 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,764 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,770 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,770 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,770 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,795 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,795 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,802 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,802 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,802 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,827 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,827 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,833 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,833 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,833 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,858 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,858 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,865 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,865 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,865 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,890 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,890 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,896 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,896 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,896 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,921 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,921 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,928 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,928 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,928 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,928 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,943 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,950 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,950 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,950 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,975 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,975 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,977 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,977 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,977 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,978 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,979 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,980 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,980 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,980 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,981 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,981 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,981 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,981 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,981 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,982 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,983 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:57,983 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:57,983 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,984 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:57,985 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,007 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,021 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,021 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,021 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,021 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,038 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,044 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,044 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,044 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,060 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,060 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,066 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,066 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,066 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,081 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,081 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,087 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,087 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,087 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,087 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,102 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,108 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,108 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,108 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,124 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,124 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,133 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,133 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,133 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,158 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,158 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,164 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,164 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,164 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,189 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,189 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,195 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,195 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,195 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,211 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Successfully posted https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=1.145.155.59&req_dat=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+16_3_1+like+Mac+OS+X%29+AppleWebKit%2F605.1.15+%28KHTML%2C+like+Gecko%29+Version%2F16.3+Mobile%2F15E148+Safari%2F604.1&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F83914&rfr_dat=https%3A%2F%2Fwww.google.com.au%2F&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A57Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fbitstream%2Fhandle%2F2027.42%2F83914%2Fmultiple_partners_are_associated_with_higher_testosterine_in_North_American_men_and_women.pdf%3Fsequence%3D1&rft_dat=Request on Wed Nov 01 23:59:58 EDT 2023 -2023-11-01 23:59:58,211 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=5177492214206519F84B84F7C9188263:ip_addr=1.145.155.59:referer=https://www.google.com.au/:view_bitstream:bitstream_id=cbbd45f6-51d8-43aa-9fd7-019eacbb737e -2023-11-01 23:59:58,229 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,229 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,235 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,235 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,236 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,260 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,260 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,267 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,267 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,267 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,282 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,282 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,288 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,288 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,288 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,303 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,303 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,309 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,309 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,309 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,309 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,325 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,331 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,331 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,331 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,356 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,356 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,389 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,389 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,389 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,389 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,405 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,420 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,427 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,427 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,427 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,442 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,442 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,448 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,448 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,448 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,448 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,473 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,479 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,489 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,489 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,489 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,505 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,505 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,512 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,512 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,512 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,536 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,536 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,543 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,543 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,543 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,567 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,568 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,574 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,574 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,574 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,598 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,598 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,605 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,605 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,605 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,605 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,629 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,636 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,636 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,636 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,636 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,651 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,657 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,682 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,688 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,688 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,688 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,688 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,688 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,710 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,710 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,710 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,710 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,736 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,742 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,768 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,768 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,774 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,774 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,774 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,774 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,799 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,806 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,806 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,806 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,821 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,821 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,827 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,827 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,827 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,827 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,852 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,859 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,859 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,859 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,859 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,874 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,880 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,880 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,880 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,905 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,905 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,911 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,911 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,911 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,912 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,927 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,933 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,933 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:58,933 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: in ORIGINAL checking for primary -2023-11-01 23:59:58,933 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: is it a primary bit -2023-11-01 23:59:58,948 INFO org.dspace.app.xmlui.objectmanager.ItemAdapter @ METS diss: checking for primary bit -2023-11-01 23:59:59,147 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:59,147 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 66.249.69.226 -2023-11-01 23:59:59,147 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 66.249.69.226 -2023-11-01 23:59:59,148 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:59,148 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:59,148 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:59,148 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:59,148 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:59,153 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: checking if bitstream should get header/citation -2023-11-01 23:59:59,153 INFO org.dspace.disseminate.CitationDocumentServiceImpl @ cc: bitstream does not get header -2023-11-01 23:59:59,157 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: start getSpecialGroups -2023-11-01 23:59:59,157 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: checking the addr = 174.164.8.95 -2023-11-01 23:59:59,157 INFO org.dspace.authenticate.PasswordAuthentication @ UPGRD The addr is (IP) value 174.164.8.95 -2023-11-01 23:59:59,158 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: NotBio 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:59,158 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: In: RequestCopy Users d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:59,158 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning 185b90c6-b6cf-43fe-b7db-59a51cd673fb -2023-11-01 23:59:59,158 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Group Found and returning d944393a-e378-46ac-93fb-51f6b37b7a55 -2023-11-01 23:59:59,158 INFO org.dspace.authenticate.PasswordAuthentication @ GROUPS: Returning all the special groups -2023-11-01 23:59:59,172 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=DA90B69E7B00CFB1128AF6023B12C631:ip_addr=66.249.69.226:referer=null:view_bitstream:bitstream_id=fae4d94d-b38b-451a-b549-b10903f6d7ad -2023-11-01 23:59:59,172 INFO org.dspace.app.xmlui.cocoon.BitstreamReader @ anonymous:session_id=DA90B69E7B00CFB1128AF6023B12C631:ip_addr=66.249.69.226:referer=null:handle=2027.42/147394:view_bitstream_details:filename=jsofo.pdf -2023-11-01 23:59:59,172 INFO com.atmire.statistics.export.ExportUsageEventListener @ Robot (Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.5993.117 Mobile Safari/537.36 (compatible; GoogleOther)) accessed jsofo.pdf/null -2023-11-01 23:59:59,172 INFO org.dspace.usage.LoggerUsageEventListener @ anonymous:session_id=DA90B69E7B00CFB1128AF6023B12C631:ip_addr=66.249.69.226:referer=null:view_bitstream:bitstream_id=fae4d94d-b38b-451a-b549-b10903f6d7ad -2023-11-01 23:59:59,182 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Prepared to send url to tracker URL: https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=174.164.8.95&req_dat=Mozilla%2F5.0+%28Macintosh%3B+Intel+Mac+OS+X+10_15_7%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F118.0.0.0+Safari%2F537.36&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F177686&rfr_dat=https%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F39366%2Fdiscover%3Fquery%3Dkhan%26submit%3D&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A59Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F177686&rft_dat=Investigation -2023-11-01 23:59:59,823 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Successfully posted https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=174.164.8.95&req_dat=Mozilla%2F5.0+%28Macintosh%3B+Intel+Mac+OS+X+10_15_7%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F118.0.0.0+Safari%2F537.36&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F177686&rfr_dat=https%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F39366%2Fdiscover%3Fquery%3Dkhan%26submit%3D&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A59Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F177686&rft_dat=Investigation on Wed Nov 01 23:59:59 EDT 2023 -2023-11-01 23:59:59,842 DEBUG com.atmire.statistics.export.ExportUsageEventListener @ Prepared to send url to tracker URL: https://irus.jisc.ac.uk/counter/us?url_ver=Z39.88-2004&req_id=174.164.8.95&req_dat=Mozilla%2F5.0+%28Macintosh%3B+Intel+Mac+OS+X+10_15_7%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F118.0.0.0+Safari%2F537.36&rft.artnum=oai%3Adeepblue.lib.umich.edu%3A2027.42%2F177686&rfr_dat=https%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F39366%2Fdiscover%3Fquery%3Dkhan%26submit%3D&rfr_id=deepblue.lib.umich.edu&url_tim=2023-11-02T03%3A59%3A59Z&svc_dat=http%3A%2F%2Fdeepblue.lib.umich.edu%2Fhandle%2F2027.42%2F177686&rft_dat=Investigation diff --git a/docker-compose.yml b/docker-compose.yml index 8a42506..37ff2ce 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,74 +1,90 @@ --- -services: - - source: - build: - dockerfile: Dockerfile - context: . - command: sleep infinity +# Docker Compose v2 – Local Development Environment +# Prerequisites: build the shared source image first (see README or `make build`). +# Copy .env.example to .env and adjust values before building. +services: frontend: depends_on: - - source - - backend + backend: + condition: service_healthy build: dockerfile: frontend.dockerfile context: . environment: + # HOST controls the Node.js SSR server bind address. + # Must be 0.0.0.0 so Docker port-mapping (4000:4000) works from the host. + HOST: '0.0.0.0' DSPACE_UI_SSL: 'false' - DSPACE_UI_HOST: frontend + # DSPACE_UI_HOST must be 0.0.0.0 for Node.js 18+ in Docker: 'localhost' resolves + # to ::1 (IPv6 loopback only), breaking Docker port-mapping. Angular's client-side + # router uses the browser URL for navigation so 0.0.0.0 does not appear in page links. + # Override in .env with the public hostname for staging/production. + DSPACE_UI_HOST: ${DSPACE_UI_HOST:-0.0.0.0} DSPACE_UI_PORT: '4000' DSPACE_UI_NAMESPACE: / DSPACE_REST_SSL: 'false' - DSPACE_REST_HOST: localhost + # DSPACE_REST_HOST must be the Docker service name 'backend' so that the Angular SSR + # server (running inside the frontend container) can reach the backend over Docker's + # internal DNS. The browser-side Angular re-uses the dspaceServer URL returned by + # the HAL root, which points to localhost:8080 (the Docker host port). + DSPACE_REST_HOST: ${DSPACE_REST_HOST:-backend} DSPACE_REST_PORT: 8080 DSPACE_REST_NAMESPACE: /server NODE_OPTIONS: "--max-old-space-size=4096" ports: - - published: 4000 - target: 4000 - - published: 9876 - target: 9876 + - "4000:4000" stdin_open: true tty: true + restart: unless-stopped backend: depends_on: - - source - - db - - solr + db: + condition: service_healthy + solr: + condition: service_healthy build: dockerfile: backend.dockerfile context: . + args: + DSPACE_VERSION: ${DSPACE_VERSION:-7.6} + JDK_VERSION: ${JDK_VERSION:-17} environment: - dspace__P__dir=/dspace - dspace__P__name=DSpace Demo - db__P__url=jdbc:postgresql://db:5432/dspace - solr__P__server=http://solr:8983/solr + - filestorage__P__dir=/dspace + # dspace.server.url MUST match the Angular DSPACE_REST_HOST:PORT/NAMESPACE so that + # HAL root links use the same hostname Angular is configured with. A mismatch causes + # Angular SSR's URL normalizer to recurse infinitely (Maximum call stack size exceeded). + # Each "." in the property key is represented by "__P__" in the env var name. + - dspace__P__server__P__url=http://backend:8080/server + # dspace.ui.url is used by the backend to generate frontend links (e.g. e-mail alerts). + - dspace__P__ui__P__url=http://localhost:4000 ports: - "8080:8080" - - "8009:8009" volumes: - dspace-assetstore:/dspace/assetstore -# - dspace-config:/dspace/config -# command: -# - "bash -c while (! /dev/null 2>&1; do sleep 1; done; /dspace/bin/dspace database migrate; catalina.sh run" - - apache: - depends_on: - - db - build: - dockerfile: apache.dockerfile - context: . - ports: - - "8888:8888" + healthcheck: + test: ["CMD-SHELL", "curl -sf --max-time 5 http://localhost:8080/server/ > /dev/null"] + # DSpace (Spring Boot + Flyway migrations) takes 3-8 minutes to start on a + # 2-core CI runner. start_period gives it breathing room before the probe + # is even evaluated; retries × interval cover the remaining startup window. + # Total budget: 120s start + 24 × 15s = ~6 minutes. + interval: 15s + timeout: 10s + retries: 24 + start_period: 120s + restart: unless-stopped db: - depends_on: - - source build: dockerfile: db.dockerfile context: . + args: + DSPACE_VERSION: ${DSPACE_VERSION:-7.6} environment: - POSTGRES_USER=dspace - POSTGRES_PASSWORD=dspace @@ -78,10 +94,14 @@ services: - db-data:/var/lib/postgresql/data ports: - "5432:5432" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U dspace"] + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped solr: - depends_on: - - source build: dockerfile: solr.dockerfile context: . @@ -92,10 +112,37 @@ services: - solr-data:/var/solr ports: - "8983:8983" + healthcheck: + test: ["CMD-SHELL", "curl -sf http://localhost:8983/solr/admin/info/system || exit 1"] + interval: 15s + timeout: 10s + retries: 5 + start_period: 30s command: - "/bin/bash" - "-c" - "init-var-solr; precreate-core authority /opt/solr/server/solr/configsets/authority; cp -r -u /opt/solr/server/solr/configsets/authority/* authority; precreate-core oai /opt/solr/server/solr/configsets/oai; cp -r -u /opt/solr/server/solr/configsets/oai/* oai; precreate-core search /opt/solr/server/solr/configsets/search; cp -r -u /opt/solr/server/solr/configsets/search/* search; precreate-core statistics /opt/solr/server/solr/configsets/statistics; cp -r -u /opt/solr/server/solr/configsets/statistics/* statistics; exec solr start -f -V -p 8983" + restart: unless-stopped + + # Optional Apache service for local testing (CGI stats scripts, etc.) + apache: + build: + dockerfile: apache.dockerfile + context: . + ports: + - "8888:8888" + profiles: + - optional + + # Optional Express metrics service – exposes Prometheus metrics on :3000 + express: + build: + dockerfile: express.dockerfile + context: . + ports: + - "3000:3000" + profiles: + - optional volumes: diff --git a/dotpy/README.md b/dotpy/README.md new file mode 100644 index 0000000..105773b --- /dev/null +++ b/dotpy/README.md @@ -0,0 +1,82 @@ +# dotpy — Python Utility Scripts + +This directory contains small Python helper scripts used by developers and AI +coding agents working in this repository. All scripts require only the Python +standard library (no `pip install` needed) and are invoked directly with +`python3`. + +--- + +## Scripts + +### `calc_widths.py` — Markdown table column-width calculator + +Reads a Markdown file (or stdin) and, for every table found, prints the maximum +between-pipe cell width for each column and a correctly sized separator row. + +**Usage** + +```shell +python3 dotpy/calc_widths.py +python3 dotpy/calc_widths.py # reads from stdin +``` + +**Example output** + +``` +Table at line 23 — 3 col(s), between-pipe widths: 33 8 11 +Separator: |---------------------------------|--------|-----------| +``` + +**When to use** + +- When authoring a new Markdown table: draft the rows first, run this script, + then paste in the printed separator and pad every cell to the reported widths. +- When a table has grown (new rows with wider content): re-run to get updated + widths and separator, then widen existing cells accordingly. + +--- + +### `check_tables.py` — Markdown table column-width validator + +Reads a Markdown file (or stdin) and checks that every row in every table — +header, separator, and data rows — has the same between-pipe column widths. +Reports any mismatches with file name and line number. + +**Usage** + +```shell +python3 dotpy/check_tables.py +python3 dotpy/check_tables.py # reads from stdin +``` + +**Exit codes:** `0` = all tables pass, `1` = one or more errors found. + +**Example output (error)** + +``` +ERROR: README.md:67 col 3: width mismatch (header=32, this row=28) + Row: '| http://localhost:8080/server | backend | Server API |' +``` + +**When to use** + +- After editing any Markdown table, run to confirm nothing is misaligned. +- In CI or pre-commit hooks to catch formatting regressions automatically. + +--- + +## Conventions for adding new scripts + +When a new Python utility is useful enough to save for future use, add it here: + +1. Place the `.py` file in this `dotpy/` directory. +2. Add a `#!/usr/bin/env python3` shebang and a module-level docstring that + includes a **Usage** section and a brief description of what the script does. +3. Accept a file path as the first positional argument (and fall back to stdin) + so the script is composable with pipes. +4. Add an entry to this README under the **Scripts** section following the same + format: script name, one-line description, Usage block, example output, and + a "When to use" note. +5. Reference the script from `AGENTS.md` if coding agents should know about it. + diff --git a/dotpy/calc_widths.py b/dotpy/calc_widths.py new file mode 100644 index 0000000..45b0870 --- /dev/null +++ b/dotpy/calc_widths.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +""" +calc_widths.py — Compute Markdown table column widths and generate separator rows. + +Usage: + python3 dotpy/calc_widths.py + python3 dotpy/calc_widths.py # reads from stdin + +For every table found in the Markdown file, prints: + - The line number where the table header begins + - The maximum between-pipe cell width for each column + - The correctly sized separator row, ready to paste into the source + +Background — how Markdown table cells are measured +--------------------------------------------------- +A well-formatted Markdown table cell looks like: + + | content_padded_to_W | + +where W is the widest content in that column and there is exactly one space +margin on each side. The "between-pipe width" of the cell is therefore W + 2. + +The separator row must use the same between-pipe width as the data/header rows: + + |----(W+2 dashes)----| + +calc_widths.py measures the actual between-pipe width of every cell across all +rows (including any existing separator row) and reports the maximum per column. +Use that maximum as the target width when padding cells, and paste the printed +separator row directly into the table. + +Typical workflow +---------------- +1. Draft a table in your Markdown file without worrying about alignment. +2. Run: python3 dotpy/calc_widths.py my_doc.md +3. Copy the printed separator row into the table. +4. Pad every cell in each column to the matching width. +5. Validate: python3 dotpy/check_tables.py my_doc.md +""" + +import sys + + +def compute_table_widths(lines): + """ + Walk *lines* (list[str]) and return one entry per table found. + + Returns: list of (start_lineno: int, col_widths: list[int]) + start_lineno — 1-based line number of the table header row + col_widths[i] — maximum between-pipe character count for column i, + across all rows (header, separator, and data rows) + """ + results = [] + in_table = False + table_start = 0 + col_max = [] + + for i, line in enumerate(lines, 1): + stripped = line.rstrip('\n') + is_row = stripped.startswith('|') and stripped.endswith('|') + + if is_row: + parts = stripped.split('|')[1:-1] + widths = [len(p) for p in parts] + + if not in_table: + in_table = True + table_start = i + col_max = list(widths) + else: + for j, w in enumerate(widths): + if j < len(col_max): + col_max[j] = max(col_max[j], w) + else: + col_max.append(w) + else: + if in_table: + results.append((table_start, list(col_max))) + in_table = False + col_max = [] + + if in_table: + results.append((table_start, list(col_max))) + + return results + + +def main(): + if len(sys.argv) > 1: + path = sys.argv[1] + with open(path) as f: + lines = f.readlines() + label = path + else: + lines = sys.stdin.readlines() + label = '' + + tables = compute_table_widths(lines) + + if not tables: + print(f'No tables found in {label}') + return + + for start, widths in tables: + separator = '|' + '|'.join('-' * w for w in widths) + '|' + width_str = ' '.join(str(w) for w in widths) + print(f'Table at line {start} — {len(widths)} col(s), between-pipe widths: {width_str}') + print(f'Separator: {separator}') + print() + + +if __name__ == '__main__': + main() diff --git a/dotpy/check_tables.py b/dotpy/check_tables.py new file mode 100644 index 0000000..2fe157d --- /dev/null +++ b/dotpy/check_tables.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 +""" +check_tables.py — Validate Markdown table column-width consistency. + +Usage: + python3 dotpy/check_tables.py + python3 dotpy/check_tables.py # reads from stdin + +Checks that every row in every Markdown table — header, separator, and all +data rows — has the same between-pipe column widths. Any mismatch is reported +with the file name and 1-based line number so it can be located immediately. + +Exit codes: + 0 — all tables are consistently formatted + 1 — one or more column-width mismatches were found + +Typical workflow +---------------- +1. After editing a Markdown table, run: + python3 dotpy/check_tables.py README.md +2. If errors are reported, run calc_widths.py on the same file to get the + correct separator row and content widths, then fix the table: + python3 dotpy/calc_widths.py README.md +""" + +import sys + + +def check_tables(lines, filename=''): + """ + Validate column-width consistency for every table in *lines* (list[str]). + + Returns a list of human-readable error strings. An empty list means all + tables pass. Each error includes *filename* and the 1-based line number. + """ + in_table = False + col_widths = [] + errors = [] + + for i, line in enumerate(lines, 1): + stripped = line.rstrip('\n') + is_row = stripped.startswith('|') and stripped.endswith('|') + + if is_row: + parts = stripped.split('|')[1:-1] + widths = [len(p) for p in parts] + + if not in_table: + in_table = True + col_widths = widths + else: + if len(widths) != len(col_widths): + errors.append( + f'{filename}:{i}: column count changed ' + f'(header had {len(col_widths)}, this row has {len(widths)})' + ) + else: + for j, (expected, actual) in enumerate(zip(col_widths, widths)): + if expected != actual: + errors.append( + f'{filename}:{i} col {j + 1}: ' + f'width mismatch (header={expected}, this row={actual})' + ) + errors.append(f' Row: {repr(stripped)}') + else: + in_table = False + col_widths = [] + + return errors + + +def main(): + if len(sys.argv) > 1: + path = sys.argv[1] + with open(path) as f: + lines = f.readlines() + filename = path + else: + lines = sys.stdin.readlines() + filename = '' + + errors = check_tables(lines, filename) + + if errors: + for e in errors: + print('ERROR:', e) + sys.exit(1) + else: + print('All tables OK') + sys.exit(0) + + +if __name__ == '__main__': + main() diff --git a/dspace-uid/README.md b/dspace-uid/README.md index 4925417..4ac3d13 100644 --- a/dspace-uid/README.md +++ b/dspace-uid/README.md @@ -10,7 +10,7 @@ Run the GitHub action workflows in the following order to build the images that | [2. Build dspace images](https://github.com/mlibrary/dspace-containerization/actions/workflows/build-dspace-images.yml) | dspace-frontend:`tag`, dspace-backend:`tag`, dspace-solr:`tag`, dspace-db:`tag` | | [3. Build dspace uid images](https://github.com/mlibrary/dspace-containerization/actions/workflows/build-dspace-uid-images.yml) | dspace-frontend:**uid**, dspace-backend:**uid**, dspace-solr:**uid**, dspace-db:**uid** | ## login -The [OpenShift Client (oc)](https://docs.openshift.com/container-platform/4.13/cli_reference/openshift_cli/getting-started-cli.html) will be used to deploy the images to [MITS Red Hat OpenShift Service on AWS](https://containers.aws.web.umich.edu/). Log in to the [dspace7-testing](https://console-openshift-console.apps.containersprod.art2.p1.openshiftapps.com/topology/ns/dspace7-testing?view=list) project (namespace) and click on the "Copy login command" link in the drop down menu under your unique login name in the upper right hand corner of the webpage. ![copy login command](images/copy-login-command.png) to get your "Display Token" link (click on the link) ![your API token](images/your-api-token.png) and execute the "Log in with this token" oc login command. +The [OpenShift Client (oc)](https://docs.openshift.com/container-platform/4.13/cli_reference/openshift_cli/getting-started-cli.html) will be used to deploy the images to [MITS Red Hat OpenShift Service on AWS](https://containers.aws.web.umich.edu/). Log in to the [dspace7-testing](https://console-openshift-console.apps.containersprod.art2.p1.openshiftapps.com/topology/ns/dspace7-testing?view=list) project (namespace) and click on the "Copy login command" link in the drop-down menu under your unique login name in the upper right-hand corner of the webpage. ![copy login command](images/copy-login-command.png) To get your "Display Token" link (click on the link) ![your API token](images/your-api-token.png) and execute the "Log in with this token" oc login command. ``` $ oc login --token=sha256~xpONnGYkpozoP7kyXEneEMInUg3u8ny9_OoB8JS3pmc --server=https://api.containersprod.art2.p1.openshiftapps.com:6443 @@ -42,7 +42,7 @@ oc apply -f dspace-uid/db-deployment.yml ```shell oc apply -f dspace-uid/solr-deployment.yml ``` -### apache +### Apache ```shell oc apply -f dspace-uid/apache-deployment.yml ``` @@ -58,8 +58,8 @@ oc apply -f dspace-uid/frontend-deployment.yml https://wiki.lyrasis.org/display/DSDOC7x/User+Interface+Configuration#UserInterfaceConfiguration-In7.2orabove NOTE: -* The frontend takes its time coming up so be patient and view the logs. -* The frontend using a lot of memory, if you need more bump up the "--max-old-space-size=8192". +* The frontend takes its time coming up, so be patient and view the logs. +* The frontend is using a lot of memory, if you need more, bump up the "--max-old-space-size=8192". ## routes From the Administrator OpenShift console ![networking-routes](images/networking-routes.png) under `Networking -> Routes` create the following routes by clicking the create route button. @@ -72,7 +72,7 @@ From the Administrator OpenShift console ![networking-routes](images/networking- | solr | /solr | solr | 8983->8983 (TCP) | true:Edge:Redirect | -## remotehost +## remote host | URL | service | comment | |--------------------------------------------------------------------------------------|----------|-----------------------| @@ -83,8 +83,8 @@ From the Administrator OpenShift console ![networking-routes](images/networking- | https://solr-dspace7-testing.apps.containersprod.art2.p1.openshiftapps.com/solr | solr | Solr GUI | | https://db-dspace7-testing.apps.containersprod.art2.p1.openshiftapps.com/ | db | PostgreSQL | -NOTE: Connecting to the database require GSSAPI configuration of your `psql` client (which is a mystery to me and you are on your own), otherwise just use port-forwarding: -### port-foward terminal +NOTE: Connecting to the database requires GSSAPI configuration of your `psql` client (which is a mystery to me, and you are on your own), otherwise use port-forwarding: +### port-forward terminal ```shell oc port-forward service/db 5432:5432 ``` diff --git a/dspace-uid/solr.dockerfile b/dspace-uid/solr.dockerfile index f68b360..23890f5 100644 --- a/dspace-uid/solr.dockerfile +++ b/dspace-uid/solr.dockerfile @@ -2,3 +2,14 @@ ARG SOURCE_IMAGE_TAG=umich FROM ghcr.io/mlibrary/dspace-containerization/dspace-solr:${SOURCE_IMAGE_TAG} ARG UID=1000950000 + +USER root + +RUN deluser solr \ + && groupadd -g $UID solr \ + && useradd -g $UID -m -l -o -u $UID solr \ + && chown -R $UID:$UID /var/solr \ + && chown -R $UID:$UID /opt/solr + +USER $UID + diff --git a/dspace/README.md b/dspace/README.md index be404ab..1c485db 100644 --- a/dspace/README.md +++ b/dspace/README.md @@ -9,8 +9,8 @@ Run the GitHub action workflows in the following order to build the images that | [1. Build dspace source image](https://github.com/mlibrary/dspace-containerization/actions/workflows/build-source-image.yml) | dspace-source:`tag` | | [2. Build dspace images](https://github.com/mlibrary/dspace-containerization/actions/workflows/build-dspace-images.yml) | dspace-frontend:`tag`, dspace-backend:`tag`, dspace-solr:`tag`, dspace-db:`tag` | -NOTE: -* The backend image contains `*.dspace.cfg.cpt` files in the `/dspace/config` directory that were copied from the `./backend/config` directory. These files were created by copying the `default.dspace.cfg` file and then making appropriate changes for the target environment. These files contain sensitive information and were encrypted using the `ccrypt` command. The keys to decrypt this files are held in Kubernetes secrets. +NOTE: +* Production configuration is **not** baked into the backend image. It is delivered at runtime via Kubernetes Secrets mounted directly as single files into the container (e.g. `dspace.cfg`, `authentication-oidc.cfg`). The actual Secret names and mount paths are managed in [deepblue-documents-kube](https://github.com/mlibrary/deepblue-documents-kube). ## configuration and deployment Argo CD is used for configuration and deployment via [deepblue-documents-kube](https://github.com/mlibrary/deepblue-documents-kube) repository. @@ -29,7 +29,7 @@ Argo CD is used for configuration and deployment via [deepblue-documents-kube](h | https://backend.workshop.deepblue-documents.lib.umich.edu/rest | backend | REST API (deprecated) | ## port-forward services (workshop example) -To reach other services use the `kubectl --namespace=workshop port-forward service/ :` command. +To reach other services, use the `kubectl --namespace=workshop port-forward service/ :` command. | URL | Container | Comments | |-----------------------------------------|-----------|----------------------------------------------| @@ -42,7 +42,7 @@ To reach other services use the `kubectl --namespace=workshop port-forward servi | http://localhost:8983/solr | solr | Solr GUI | | http://localhost:9876/ | frontend | debugging??? | -### port-foward database (workshop example) +### port-forward database (workshop example) Shell Terminal One ```shell kubectl --namespace=workshop port-forward service/db 5432:5432 diff --git a/dspace/backend.dockerfile b/dspace/backend.dockerfile index cc88b62..872d705 100644 --- a/dspace/backend.dockerfile +++ b/dspace/backend.dockerfile @@ -1,13 +1,12 @@ ARG DSPACE_VERSION=7.6 ARG SOURCE_IMAGE_TAG=umich -# This Dockerfile uses JDK11 by default, but has also been tested with JDK17. -# To build with JDK17, use "--build-arg JDK_VERSION=17" +# This Dockerfile uses JDK17 (eclipse-temurin). ARG JDK_VERSION=17 -FROM ghcr.io/mlibrary/dspace-containerization/dspace-source:${SOURCE_IMAGE_TAG} as source +FROM ghcr.io/mlibrary/dspace-containerization/dspace-source:${SOURCE_IMAGE_TAG} AS source # Step 1 - Run Maven Build -FROM dspace/dspace-dependencies:dspace-${DSPACE_VERSION} as mvn_build +FROM dspace/dspace-dependencies:dspace-${DSPACE_VERSION} AS mvn_build ARG TARGET_DIR=dspace-installer WORKDIR /app @@ -27,24 +26,23 @@ RUN mvn --no-transfer-progress package -Pdspace-rest && \ mvn clean # Step 2 - Run Ant Deploy -FROM eclipse-temurin:${JDK_VERSION} as ant_build +FROM eclipse-temurin:${JDK_VERSION} AS ant_build #FROM openjdk:${JDK_VERSION}-slim as ant_build ARG TARGET_DIR=dspace-installer # COPY the /install directory from 'build' container to /dspace-src in this container COPY --from=mvn_build /install /dspace-src WORKDIR /dspace-src # Create the initial install deployment using ANT -ENV ANT_VERSION 1.10.12 -ENV ANT_HOME /tmp/ant-$ANT_VERSION -ENV PATH $ANT_HOME/bin:$PATH -# Need wget to install ant -RUN apt-get update \ - && apt-get install -y --no-install-recommends wget \ - && apt-get purge -y --auto-remove \ +ENV ANT_VERSION=1.10.12 +ENV ANT_HOME=/tmp/ant-$ANT_VERSION +ENV PATH=$ANT_HOME/bin:$PATH +# Need wget to install ant; download and install ant, then purge wget +RUN apt-get -o Acquire::Retries=3 update \ + && apt-get -o Acquire::Retries=3 install -y --no-install-recommends wget \ + && mkdir $ANT_HOME \ + && wget -qO- "https://archive.apache.org/dist/ant/binaries/apache-ant-$ANT_VERSION-bin.tar.gz" | tar -zx --strip-components=1 -C $ANT_HOME \ + && apt-get purge -y --auto-remove wget \ && rm -rf /var/lib/apt/lists/* -# Download and install 'ant' -RUN mkdir $ANT_HOME && \ - wget -qO- "https://archive.apache.org/dist/ant/binaries/apache-ant-$ANT_VERSION-bin.tar.gz" | tar -zx --strip-components=1 -C $ANT_HOME # Run necessary 'ant' deploy scripts RUN ant init_installation update_configs update_code update_webapps @@ -57,9 +55,8 @@ ENV TOMCAT_INSTALL=/usr/local/tomcat COPY --from=ant_build /dspace $DSPACE_INSTALL # Install additional libraries needed for backend scripts -RUN apt update; \ - apt install -y --no-install-recommends \ - ccrypt \ +RUN apt-get -o Acquire::Retries=3 update \ + && apt-get -o Acquire::Retries=3 install -y --no-install-recommends \ libcgi-pm-perl \ libdbi-perl \ libio-all-lwp-perl \ @@ -73,7 +70,7 @@ RUN apt update; \ libmime-lite-perl \ libnet-sftp-foreign-perl \ libmailtools-perl \ - libio-pty-perl \ + libio-pty-perl \ unzip \ zip \ xsltproc \ @@ -94,8 +91,16 @@ RUN mkdir /root/.emacs.d # Install additional backend scripts COPY ./backend/init.el /root/.emacs.d/init.el COPY ./backend/bin/ $DSPACE_INSTALL/bin/ -COPY ./backend/config/ $DSPACE_INSTALL/config/ -COPY ./backend/logs/ $DSPACE_INSTALL/logs/ + +# backend/config/ is intentionally NOT copied here. Those files are only needed +# for local Docker Compose development and the ci.yml smoke-test workflow, both +# of which use the root backend.dockerfile. Production/staging configuration is +# supplied at runtime via environment variables or mounted Kubernetes Secrets. + +# The logs directory is already created by `ant init_installation` above, +# so the explicit mkdir is redundant. Kept here (commented out) as a reminder +# in case the ant install layout ever changes. +# RUN mkdir -p $DSPACE_INSTALL/logs # Enable the AJP connector in Tomcat's server.xml # NOTE: secretRequired="false" should only be used when AJP is NOT accessible from an external network. But, secretRequired="true" isn't supported by mod_proxy_ajp until Apache 2.5 @@ -105,10 +110,10 @@ RUN sed -i '//dev/null || echo "000") + if [ "$actual" = "$expected" ]; then + pass "$desc" + else + fail "$desc — expected HTTP $expected, got $actual" + info "$url" + fi +} + +# Assert that the response body of a URL contains a given string. +assert_body_contains() { + local desc="$1" url="$2" needle="$3" + local body + body=$(curl -s --max-time "$CURL_TIMEOUT" "$url" 2>/dev/null || echo "") + if echo "$body" | grep -Fq -- "$needle"; then + pass "$desc" + else + fail "$desc — '$needle' not found in response body" + info "$url" + fi +} + + +# ── Backend REST API ────────────────────────────────────────────────────────── +section "Backend REST API $BACKEND_URL" + +assert_status "HAL root returns 200" \ + "$BACKEND_URL/server/api" 200 + +assert_body_contains "HAL root contains _links" \ + "$BACKEND_URL/server/api" '"_links"' + +assert_body_contains "HAL root contains dspaceVersion" \ + "$BACKEND_URL/server/api" '"dspaceVersion"' + +assert_body_contains "HAL root contains dspaceServer URL" \ + "$BACKEND_URL/server/api" '"dspaceServer"' + +assert_status "Communities endpoint returns 200" \ + "$BACKEND_URL/server/api/core/communities" 200 + +assert_status "Collections endpoint returns 200" \ + "$BACKEND_URL/server/api/core/collections" 200 + +assert_status "Authn status endpoint returns 200" \ + "$BACKEND_URL/server/api/authn/status" 200 + +# Fetch body once for both authn field-presence and authenticated=false checks. +_AUTHN_BODY=$(curl -s --max-time "$CURL_TIMEOUT" "$BACKEND_URL/server/api/authn/status" 2>/dev/null || echo "") + +if echo "$_AUTHN_BODY" | grep -Fq -- '"authenticated"'; then + pass "Authn status — contains authenticated field" +else + fail "Authn status — contains authenticated field — field not found in response" +fi + +# Use jq for a format-agnostic false-check when available; otherwise check both +# compact and spaced JSON representations with fixed-string grep. +if command -v jq >/dev/null 2>&1; then + if echo "$_AUTHN_BODY" | jq -e '.authenticated == false' >/dev/null 2>&1; then + pass "Authn status — authenticated is false (jq)" + else + fail "Authn status — authenticated is false — jq: authenticated is not false" + fi +else + if echo "$_AUTHN_BODY" | grep -Fq -- '"authenticated":true' || + echo "$_AUTHN_BODY" | grep -Fq -- '"authenticated" : true'; then + fail "Authn status — authenticated is false — authenticated=true in response (grep fallback)" + else + pass "Authn status — authenticated is false (grep fallback)" + fi +fi + +# ── Backend Actuator (Spring Boot health) ──────────────────────────────────── +section "Backend Actuator" + +# DSpace 7.x reports "UP" (fully healthy) or "UP_WITH_ISSUES" (running, minor issues). +# Both mean the application is operational. We match the prefix without the closing +# quote so that both values pass. +HEALTH=$(curl -s --max-time "$CURL_TIMEOUT" "$BACKEND_URL/server/actuator/health" 2>/dev/null || echo "") +if echo "$HEALTH" | grep -Fq -- '"status":"UP'; then + pass "Actuator health is UP (or UP_WITH_ISSUES)" +elif [ -n "$HEALTH" ]; then + fail "Actuator health not UP" + info "Response: $(echo "$HEALTH" | head -c 200)" +else + fail "Actuator health endpoint unreachable" +fi + +# ── Solr ───────────────────────────────────────────────────────────────────── +section "Solr $SOLR_URL" + +assert_status "Solr system info returns 200" \ + "$SOLR_URL/solr/admin/info/system" 200 + +assert_body_contains "Solr system info — solr version present" \ + "$SOLR_URL/solr/admin/info/system" '"solr-spec-version"' + +assert_status "Solr cores admin returns 200" \ + "$SOLR_URL/solr/admin/cores" 200 + +# DSpace requires four cores: authority, oai, search, statistics +for core in authority oai search statistics; do + assert_body_contains "Solr core '$core' exists" \ + "$SOLR_URL/solr/admin/cores" "\"$core\"" +done + +assert_status "Solr 'search' core status returns 200" \ + "$SOLR_URL/solr/search/admin/ping" 200 + +# ── Frontend (Angular SSR) ──────────────────────────────────────────────────── +# The U-Mich dspace-angular build only SSR-renders specific DSpace object paths +# (/communities/, /collections/, /items/, /documents/, /bitstream/, /bitstreams/). +# The root "/" is intentionally served as a CSR shell (empty ). +# We therefore check: +# / — returns 200 and no Angular error boundary +# /communities/ — SSR path: server renders ds-root + DSpace title +section "Frontend $FRONTEND_URL" + +_FE_ROOT_BODY=$(mktemp) +_FE_ROOT_HTTP=$(curl -s -w "%{http_code}" --max-time "$CURL_TIMEOUT" -o "$_FE_ROOT_BODY" "$FRONTEND_URL/" 2>/dev/null || echo "000") + +if [ "$_FE_ROOT_HTTP" = "200" ]; then + pass "Frontend / returns 200" +else + fail "Frontend / returns 200 — expected HTTP 200, got $_FE_ROOT_HTTP" + info "$FRONTEND_URL/" +fi + +if grep -Fq -- "ng-error" "$_FE_ROOT_BODY" 2>/dev/null; then + fail "Frontend / — no Angular error boundary — 'ng-error' found in response body" + info "$FRONTEND_URL/" +else + pass "Frontend / — no Angular error boundary" +fi + +rm -f "$_FE_ROOT_BODY" + +# SSR check on /communities/ — this path is rendered server-side +_FE_SSR_BODY=$(mktemp) +_FE_SSR_HTTP=$(curl -s -w "%{http_code}" --max-time "$CURL_TIMEOUT_SSR" -o "$_FE_SSR_BODY" "$FRONTEND_URL/communities/" 2>/dev/null || echo "000") + +if [ "$_FE_SSR_HTTP" = "200" ]; then + pass "Frontend /communities/ returns 200 (SSR path)" +else + fail "Frontend /communities/ returns 200 — expected HTTP 200, got $_FE_SSR_HTTP" + info "$FRONTEND_URL/communities/" +fi + +if grep -Fq -- "ds-root" "$_FE_SSR_BODY" 2>/dev/null; then + pass "Frontend /communities/ — contains ds-root (Angular SSR rendered)" +else + fail "Frontend /communities/ — contains ds-root — 'ds-root' not found in SSR response" + info "$FRONTEND_URL/communities/" +fi + +if grep -Fq -- "DSpace" "$_FE_SSR_BODY" 2>/dev/null; then + pass "Frontend /communities/ — contains DSpace title" +else + fail "Frontend /communities/ — contains DSpace title — 'DSpace' not found in SSR response" + info "$FRONTEND_URL/communities/" +fi + +rm -f "$_FE_SSR_BODY" + +# ── Summary ─────────────────────────────────────────────────────────────────── +echo "" +echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +if [ "$FAIL" -eq 0 ]; then + echo -e " ${GREEN}All ${PASS} tests passed.${NC}" +else + echo -e " ${GREEN}${PASS} passed${NC} ${RED}${FAIL} failed${NC}" + echo "" + echo -e " ${RED}Failed tests:${NC}" + for err in "${ERRORS[@]}"; do + echo -e " ${RED}✗${NC} $err" + done +fi +echo -e "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + +[ "$FAIL" -eq 0 ] + diff --git a/tests/wait-for-stack.sh b/tests/wait-for-stack.sh new file mode 100755 index 0000000..c026a6e --- /dev/null +++ b/tests/wait-for-stack.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# tests/wait-for-stack.sh +# Wait for all core DSpace services to be reachable before running tests. +# +# Usage: +# ./tests/wait-for-stack.sh [max_seconds] +# +# Environment variables (all optional, defaults shown): +# BACKEND_URL http://localhost:8080 +# SOLR_URL http://localhost:8983 +# FRONTEND_URL http://localhost:4000 +# MAX_WAIT 300 + +set -euo pipefail + +MAX_WAIT="${1:-${MAX_WAIT:-300}}" +BACKEND_URL="${BACKEND_URL:-http://localhost:8080}" +SOLR_URL="${SOLR_URL:-http://localhost:8983}" +FRONTEND_URL="${FRONTEND_URL:-http://localhost:4000}" + +YELLOW='\033[1;33m' +GREEN='\033[0;32m' +RED='\033[0;31m' +NC='\033[0m' + +echo -e "${YELLOW}Waiting for DSpace stack (max ${MAX_WAIT}s)...${NC}" +start=$(date +%s) + +wait_for() { + local name="$1" + local url="$2" + printf " %-20s" "$name" + until curl -sf --max-time 5 "$url" > /dev/null 2>&1; do + elapsed=$(( $(date +%s) - start )) + if [ "$elapsed" -ge "$MAX_WAIT" ]; then + echo -e " ${RED}TIMEOUT${NC} after ${elapsed}s waiting for $url" + exit 1 + fi + printf "." + sleep 5 + done + elapsed=$(( $(date +%s) - start )) + echo -e " ${GREEN}ready${NC} (${elapsed}s)" +} + +wait_for "backend" "$BACKEND_URL/server/" +wait_for "solr" "$SOLR_URL/solr/admin/info/system" +wait_for "frontend" "$FRONTEND_URL/" + +echo -e "${GREEN}All services ready.${NC}" +