# Web Server / WebLib Down

LLMS index: [llms.txt](/llms.txt)

---

<div id="pslens-context-panel" class="card border-info mb-4 d-none">
  <div class="card-header bg-light text-info py-2 fw-bold d-flex align-items-center border-bottom border-info-subtle">
    <i class="bi bi-info-circle-fill me-2"></i>
    <span>Tailored Operational Context</span>
  </div>
  <div class="card-body p-0">
    <ul class="list-group list-group-flush">
      <li id="row-db" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Target Database:</strong>
        <span id="ctx-db" class="badge bg-secondary font-monospace">&mdash;</span>
      </li>
      <li id="row-type" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Context Type:</strong>
        <span id="ctx-type" class="badge bg-light text-dark border font-monospace text-uppercase">&mdash;</span>
      </li>
      <li id="row-severity" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Alert Severity:</strong>
        <span id="ctx-severity" class="badge">&mdash;</span>
      </li>
      <li id="row-time" class="list-group-item d-flex align-items-center justify-content-between py-2 d-none">
        <strong>Triggered Time:</strong>
        <span id="ctx-time" class="text-muted small">&mdash;</span>
      </li>
      <li id="row-details" class="list-group-item py-2 d-none">
        <strong id="label-details" class="d-block mb-1">Firing Context:</strong>
        <code id="ctx-details" class="d-block p-2 bg-light border rounded small" style="white-space: pre-wrap; word-break: break-all;">&mdash;</code>
      </li>
    </ul>
  </div>
</div>

<script>
  (function() {
    const params = new URLSearchParams(window.location.search);
    const metadata = params.get('metadata');
    if (!metadata) return;

    try {
      
      const base64 = metadata.replace(/-/g, '+').replace(/_/g, '/');
      const jsonStr = decodeURIComponent(escape(window.atob(base64)));
      const data = JSON.parse(jsonStr);

      if (data) {
        let hasData = false;

        if (data.db) {
          document.getElementById('ctx-db').textContent = data.db;
          document.getElementById('row-db').classList.remove('d-none');
          hasData = true;
        }

        if (data.type) {
          document.getElementById('ctx-type').textContent = data.type;
          document.getElementById('row-type').classList.remove('d-none');
          hasData = true;
        }

        if (data.severity) {
          const severityBadge = document.getElementById('ctx-severity');
          const severity = data.severity.toLowerCase();
          severityBadge.textContent = severity.toUpperCase();
          if (severity === 'critical') {
            severityBadge.className = 'badge bg-danger';
          } else if (severity === 'warning') {
            severityBadge.className = 'badge bg-warning text-dark';
          } else {
            severityBadge.className = 'badge bg-info';
          }
          document.getElementById('row-severity').classList.remove('d-none');
          hasData = true;
        }

        if (data.t) {
          const date = new Date(data.t * 1000);
          document.getElementById('ctx-time').textContent = date.toLocaleString();
          document.getElementById('row-time').classList.remove('d-none');
          hasData = true;
        }

        if (data.details) {
          document.getElementById('ctx-details').textContent = data.details;

          
          const labelDetails = document.getElementById('label-details');
          if (data.type === 'object') {
            labelDetails.textContent = 'Object Metadata Details:';
          } else if (data.type === 'report') {
            labelDetails.textContent = 'Report Description:';
          } else {
            labelDetails.textContent = 'Firing Context:';
          }

          document.getElementById('row-details').classList.remove('d-none');
          hasData = true;
        }

        if (hasData) {
          document.getElementById('pslens-context-panel').classList.remove('d-none');
        }
      }
    } catch (e) {
      console.error('Failed to parse operational context metadata:', e);
    }
  })();
</script>


## Web Server / WebLib Down Alert

**Alert ID:** `weblib_down`
**Category:** Web Server / WebLib
**Default threshold:** Immediate

### What This Alert Detects

psLens POSTs to one or more configured WebLib or IScript URLs every check cycle. If any target connection fails or returns a 5xx, the alert fires Critical.

By default, the checker tests the standard delivered WebLib endpoint:
`WEBLIB_PTBR.ISCRIPT1.FieldFormula.IScript_StartPage`

If the Web Server is down, or if the whitelisted API service account loses security access to the tested WebLib, the alert triggers immediately.

### Severity Logic

|                                Condition                                 | Severity |
| ------------------------------------------------------------------------ | -------- |
| Target URL is unreachable or connection times out                        | Critical |
| Target WebLib returns an HTTP status code >= 500 (Internal Server Error) | Critical |

*Note: HTTP statuses like 200 (Success), 401 (Unauthorized), 403 (Forbidden), or 302 (Redirect) indicate the Web Server is active and processing requests; they do not trigger a down alert.*

### What Gets Checked

For each target URL configured in `weblibTestTargets`:

1. It sends an HTTP POST request with a 10-second timeout.
2. It applies HTTP Basic Authentication using either target-specific credentials or default database connection credentials.
3. It registers a failure if the request fails to connect or returns a status code in the 5xx range.

### Configuration

```yaml
alerts:
  checks:
    weblib_down:
      enabled: true
      weblibTestTargets:
        - url: "https://pia.yourcompany.com/psc/ps/s/WEBLIB_PTBR.ISCRIPT1.FieldFormula.IScript_StartPage"
          username: "PIA_TEST_USER"
          password: "secure-password"
```

|       Setting       | Default |                                                 Description                                                 |
| ------------------- | ------- | ----------------------------------------------------------------------------------------------------------- |
| `enabled`           | `true`  | Whether this check is active.                                                                               |
| `weblibTestTargets` | `[]`    | List of target configurations. Each target requires a `url` and optional `username` / `password` overrides. |

### How to Respond

1. Verify whether the PeopleSoft Web Server (WebLogic or WebSphere) process is booted and running.
2. Check if there are network outages, load balancer failures, or firewall changes between the psLens server and the PIA URL.
3. If the server is reachable but returning a `weblib_down` alert, verify that the configured PeopleSoft service account has security clearance (assigned Permission Lists) to access the target WebLib.
