# DACS Receiver

The DACS Receiver collects operational metrics from DACS environments and sends them through an OpenTelemetry metrics pipeline.

<table><caption class="sr-only">DACS Receiver</caption><thead><tr><th scope="col">Property</th><th scope="col">Value</th></tr></thead><tbody><tr><td>Component ID</td><td><code>dacsreceiver</code></td></tr><tr><td>Type</td><td>Receiver</td></tr><tr><td>Signal</td><td>Metrics</td></tr><tr><td>Availability</td><td>PHO Collector distribution</td></tr></tbody></table>

## Capabilities

-   DACS operational information stored in PostgreSQL.
-   Host-local monitoring of the DACS Server, Station daemon, ESP, Service Control Point, Sink daemon, and local and remote WAN daemons.
-   Independent collection intervals and timeouts for each source.
-   Metric-group and individual-metric selection.
-   OpenTelemetry-compatible output for downstream processing and export.

SOAP collection is not offered as a supported customer capability in the current release and should remain disabled.

## Prerequisites

-   A PHO Collector distribution containing `dacsreceiver`.
-   A PHO licence with one `dacsreceiver` entitlement per configured receiver instance.
-   For PostgreSQL monitoring, network access and valid database credentials.
-   For host-local monitoring, the Collector must run on a host containing the relevant DACS process.
-   The Collector service account must be permitted to use the installed DACS statistics utility.

The Sink daemon commonly runs on an ADS host and may require a separate Collector deployment.

## Configuration

At least one source must be enabled.

### PostgreSQL settings

<table><caption class="sr-only">PostgreSQL settings</caption><thead><tr><th scope="col">Setting</th><th scope="col">Required</th><th scope="col">Default</th><th scope="col">Description</th></tr></thead><tbody><tr><td><code>enabled</code></td><td>No</td><td><code>true</code></td><td>Enables PostgreSQL collection</td></tr><tr><td><code>endpoint</code></td><td>When enabled</td><td>—</td><td>PostgreSQL connection string</td></tr><tr><td><code>username</code></td><td>No</td><td>—</td><td>Database username</td></tr><tr><td><code>password</code></td><td>No</td><td>—</td><td>Database password</td></tr><tr><td><code>collection_interval</code></td><td>No</td><td><code>30s</code></td><td>Collection frequency</td></tr><tr><td><code>timeout</code></td><td>No</td><td><code>10s</code></td><td>Maximum collection duration</td></tr></tbody></table>

### Host-local source settings

<table><caption class="sr-only">Host-local source settings</caption><thead><tr><th scope="col">Block</th><th scope="col">Monitored service</th><th scope="col">Metric prefix</th><th scope="col">Available metrics</th></tr></thead><tbody><tr><td><code>dacs_svr</code></td><td>DACS Server</td><td><code>dacs.svr.*</code></td><td>76</td></tr><tr><td><code>dacs_stn</code></td><td>DACS Station daemon</td><td><code>dacs.stn.*</code></td><td>46</td></tr><tr><td><code>dacs_esp</code></td><td>DACS ESP</td><td><code>dacs.esp.*</code></td><td>22</td></tr><tr><td><code>dacs_scp_main</code></td><td>Service Control Point</td><td><code>dacs.scp.*</code></td><td>22</td></tr><tr><td><code>dacs_snkd</code></td><td>Sink daemon</td><td><code>dacs.snkd.*</code></td><td>48</td></tr><tr><td><code>dacs_wanl</code></td><td>Local WAN daemon</td><td><code>dacs.wanl.*</code></td><td>69</td></tr><tr><td><code>dacs_wanr</code></td><td>Remote WAN daemon</td><td><code>dacs.wanr.*</code></td><td>71</td></tr></tbody></table>

Each block accepts:

<table><caption class="sr-only">Host-local source settings</caption><thead><tr><th scope="col">Setting</th><th scope="col">Required</th><th scope="col">Default</th><th scope="col">Description</th></tr></thead><tbody><tr><td><code>enabled</code></td><td>No</td><td><code>false</code></td><td>Enables collection for this service</td></tr><tr><td><code>tool_path</code></td><td>When enabled</td><td><code>/reuters/dacs/tools/set_debug</code></td><td>Installed DACS statistics utility</td></tr><tr><td><code>collection_interval</code></td><td>No</td><td><code>60s</code></td><td>Collection frequency</td></tr><tr><td><code>timeout</code></td><td>No</td><td><code>15s</code></td><td>Maximum collection duration; cannot exceed the interval</td></tr><tr><td><code>groups</code></td><td>No</td><td>Component defaults</td><td>Enables or disables metric categories</td></tr><tr><td><code>metrics</code></td><td>No</td><td>Group setting</td><td>Overrides an individual metric</td></tr></tbody></table>

### Example

```
extensions:
  pho_license:
    file: /etc/otelcol/license.json

receivers:
  dacsreceiver:
    postgres:
      enabled: true
      endpoint: postgresql://dacs-db.example.com:5432/dacs
      username: ${env:DACS_DB_USER}
      password: ${env:DACS_DB_PASSWORD}
      collection_interval: 30s
      timeout: 10s
    soap:
      enabled: false
    dacs_svr:
      enabled: true
      tool_path: /reuters/dacs/tools/set_debug
      collection_interval: 60s
      timeout: 15s
      groups:
        ping_status:
          enabled: true
      metrics:
        dacs.svr.load.position.count:
          enabled: false

processors:
  batch: {}

exporters:
  otlp:
    endpoint: telemetry-gateway.example.com:4317

service:
  extensions: [pho_license]
  pipelines:
    metrics:
      receivers: [dacsreceiver]
      processors: [batch]
      exporters: [otlp]
```

Use environment variables or an approved secrets manager for credentials.

## Metric groups

<table><caption class="sr-only">Metric groups</caption><thead><tr><th scope="col">Source</th><th scope="col">Enabled by default</th><th scope="col">Optional categories</th></tr></thead><tbody><tr><td>DACS Server</td><td>Process status and system load</td><td>Active/backup servers, station activity, logins, updates, usage, checksums, sizes, buffers, ping status, historical news, user lists, and debug requests</td></tr><tr><td>DACS Station</td><td>Daemon status and SCP information</td><td>Messages, buffers, and wait status</td></tr><tr><td>DACS ESP</td><td>Daemon status and SCP information</td><td>Messages, uploads, downloads, software, usage data, and application signing</td></tr><tr><td>Service Control Point</td><td>Version, connection statistics, and operation statistics</td><td>Database size</td></tr><tr><td>Sink daemon</td><td>Daemon status and client information</td><td>Messages, buffers, login attempts, and off-state information</td></tr><tr><td>Local WAN daemon</td><td>Status flags and persistent HTTP</td><td>WAN and IPC message activity</td></tr><tr><td>Remote WAN daemon</td><td>Network information and persistent HTTP</td><td>WAN/server activity, pending requests, and ping information</td></tr></tbody></table>

An individual metric setting takes precedence over its group setting. Unknown group and metric names are rejected during configuration validation.

## PostgreSQL telemetry

<table><caption class="sr-only">PostgreSQL telemetry</caption><thead><tr><th scope="col">Metric</th><th scope="col">Unit</th><th scope="col">Description</th></tr></thead><tbody><tr><td><code>dacs.usage_filter.mount.count</code></td><td><code>1</code></td><td>Mount requests by DACS site</td></tr><tr><td><code>dacs.usage_filter.mount_denied.count</code></td><td><code>1</code></td><td>Denied mount requests by site</td></tr><tr><td><code>dacs.usage_filter.item_open.count</code></td><td><code>1</code></td><td>Item-open requests by site</td></tr><tr><td><code>dacs.usage_filter.item_denied.count</code></td><td><code>1</code></td><td>Denied item requests by site</td></tr><tr><td><code>dacs.consolidation.item.status</code></td><td><code>1</code></td><td>Consolidation status</td></tr><tr><td><code>dacs.db.main.size</code></td><td><code>By</code></td><td>Main DACS database size</td></tr><tr><td><code>dacs.map_collect.vendor.revision</code></td><td><code>1</code></td><td>Vendor mapping revision</td></tr></tbody></table>

Common attributes include `dacs.source`, `dacs.component`, `dacs.site`, `dacs.db`, `dacs.vendor`, and `dacs.status_class`.

## Operational behaviour

-   A failed collection does not report a misleading healthy or zero value.
-   Other enabled sources continue operating when one source fails.
-   Collection resumes automatically when the source becomes available.
-   Monitoring should alert on both unhealthy values and missing data.

## Troubleshooting

<table><caption class="sr-only">Troubleshooting</caption><thead><tr><th scope="col">Symptom</th><th scope="col">Recommended action</th></tr></thead><tbody><tr><td>Receiver fails during startup</td><td>Confirm at least one source is enabled and every enabled source is configured</td></tr><tr><td>PostgreSQL metrics are absent</td><td>Verify credentials, database availability, network access, and the connection string</td></tr><tr><td>Host-local metrics are absent</td><td>Verify the DACS process is running and the Collector account can use the configured utility</td></tr><tr><td>Only a small metric set appears</td><td>Enable the required metric groups</td></tr><tr><td>Configuration reports an unknown group</td><td>Confirm the group belongs to the selected DACS service</td></tr><tr><td>Frequent collection timeouts</td><td>Increase the timeout without exceeding the collection interval</td></tr><tr><td>Insufficient licence capacity</td><td>Confirm one <code>dacsreceiver</code> entitlement is available per configured instance</td></tr></tbody></table>
