# Process Errors

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>


## Process Errors Alert

**Alert ID:** `process_errors`
**Category:** Process Scheduler
**Default lookback:** 24 hours

### What This Alert Detects

This alert finds Process Scheduler requests that have **failed** within a configurable lookback window. It catches processes that ended in one of three error statuses:

|   Run Status   | PeopleSoft Code |                      Meaning                      |
| -------------- | --------------- | ------------------------------------------------- |
| Error          | 3               | The process ended with an error condition         |
| Not Successful | 10              | The process ran but reported a non-success result |
| Unable to Post | 12              | The process output could not be delivered         |

### Severity Logic

|             Process Type             |                       Status                        | Severity |
| ------------------------------------ | --------------------------------------------------- | -------- |
| Recurring (on a recurrence schedule) | Error (3), Not Successful (10), Unable to Post (12) | Critical |
| Non-Recurring (ad-hoc execution)     | Error (3), Not Successful (10), Unable to Post (12) | Warning  |

- **Recurring Processes:** Any failure fires Critical immediately.
- **Non-Recurring Processes:** Fire Warning after the `thresholdMinutes` grace period.

### Alert Details

Each alert item includes:

- Process name and instance number
- Run status label (Error, Not Successful, Unable to Post)
- The operator who submitted the request
- When the process ran
- A link to the Process Monitor detail page for that instance

### Configuration

```yaml
alerts:
  checks:
    process_errors:
      enabled: true
      lookbackHours: 24        # How far back to look for failures
      thresholdMinutes: 15     # Grace period buffer in minutes for non-recurring errors
      excludeProcesses:        # Process names to skip
        - KNOWN_FLAKY_PROCESS
```

|      Setting       | Default |                                             Description                                              |
| ------------------ | ------- | ---------------------------------------------------------------------------------------------------- |
| `lookbackHours`    | `24`    | Number of hours back to search for failed processes                                                  |
| `thresholdMinutes` | `0`     | Grace period buffer (in minutes) for non-recurring process errors before they raise a Warning alert. |
| `excludeProcesses` | `[]`    | List of process names to exclude from this check                                                     |

### How to Respond

1. Click the alert link to go directly to the Process Monitor entry for the failed process
2. Review the process details: run status, begin and end times, server
3. Look for output files or log information that might explain the failure
4. Check whether this is a one-time failure or a repeating issue
5. If the process needs to be rerun, submit a new request from PeopleSoft

### Common Causes of Process Failures

- **Data errors:** The process encountered unexpected data (null values, bad formats, constraint violations)
- **Resource issues:** The server ran out of memory or disk space
- **Timeout:** The process exceeded its allowed run time
- **Configuration problems:** A required configuration parameter is missing or incorrect
- **Dependency failures:** A process that runs after another failed because the first one didn't complete correctly

### Reducing Alert Noise

If certain processes fail regularly and you're already tracking them separately, add them to `excludeProcesses` to keep the alert list focused on unexpected failures.
