{"ref":"artifact:sleibach-cap-ui-telemetry","page":"/artifacts/sleibach-cap-ui-telemetry","json":"/artifacts/sleibach-cap-ui-telemetry.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"sleibach-cap-ui-telemetry","name":"cap-ui-telemetry","artifact_type":"cds-plugin","ecosystem":"cap","domain":"operations-and-runtime","origin_ring":"independent","description":{"one_line":"UI5 frontend performance (FESR) and client error capture for CAP, written as cds.log records and forwarded to SAP Cloud Logging, rather than as OpenTelemetry spans.","short":"UI5 frontend performance and error capture for CAP","what_it_solves":"cap-ui-telemetry captures the half of a request that happens before it reaches the server. It reads the SAP-Perf-FESRec headers UI5 piggybacks onto the next backend call after each completed interaction, and it adds a CDS REST service that accepts batches of client-side JavaScript errors, writing one structured cds.log record per interaction and one cds.log('ui-error') record per error. Both arrive as log records and not as OpenTelemetry spans, so they are read where the application's logs are read rather than in a trace view. It needs [@sap/cds](artifact:sap-cds) 8.0 or later on Node.js, a UI5 app that sends FESR, and [SAP Cloud Logging](artifact:btp-cloud-logging) bound to the CAP app for the custom fields to be indexed; the sampling fraction, the batch size and the message and stack lengths are configuration."},"links":{"repo":"https://github.com/sleibach/cap-ui-telemetry","npm":"https://www.npmjs.com/package/cap-ui-telemetry"},"identity":{"author":"sleibach","license":"Apache-2.0"},"compat":{"runtimes":["node"]},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/sleibach/cap-ui-telemetry","title":"cap-ui-telemetry — README","checked":"2026-10-18","quote":"npm add cap-ui-telemetry"}]}},"provides":[{"capability":"capability:telemetry","what_it_does":"Brings the browser's own measurements into the server's record: UI5 interaction timings read from the FESR headers, and client-side JavaScript errors posted in batches to a CDS REST service, each written as a cds.log record for SAP Cloud Logging to index.","sources":[{"url":"https://raw.githubusercontent.com/sleibach/cap-ui-telemetry/78e5d7576ac69d18b807161b4c52c73a3cb28d04/README.md","title":"cap-ui-telemetry — README","checked":"2026-10-15","quote":"UI5 FESR (frontend performance) + client-error capture for SAP CAP (Node.js), forwarded to SAP Cloud Logging via `cds.log`."},{"url":"https://raw.githubusercontent.com/sleibach/cap-ui-telemetry/78e5d7576ac69d18b807161b4c52c73a3cb28d04/README.md","title":"cap-ui-telemetry — README, FESR capture","checked":"2026-10-15","quote":"**FESR capture** — reads the `SAP-Perf-FESRec` / `SAP-Perf-FESRec-opt` headers UI5 piggybacks onto the next backend request after each completed interaction"},{"url":"https://raw.githubusercontent.com/sleibach/cap-ui-telemetry/78e5d7576ac69d18b807161b4c52c73a3cb28d04/README.md","title":"cap-ui-telemetry — README, Client-error ingestion","checked":"2026-10-15","quote":"**Client-error ingestion** — a CDS REST service (`POST <path>/errors`) accepts batches of client errors and emits one `cds.log('ui-error')` record per entry."}],"facets":[{"key":"destinations","value":["SAP Cloud Logging"],"source":{"url":"https://raw.githubusercontent.com/sleibach/cap-ui-telemetry/78e5d7576ac69d18b807161b4c52c73a3cb28d04/README.md","title":"cap-ui-telemetry — README","checked":"2026-10-15","quote":"UI5 FESR (frontend performance) + client-error capture for SAP CAP (Node.js), forwarded to SAP Cloud Logging via `cds.log`."}},{"key":"instrumented_by","value":["Automatically"],"source":{"url":"https://raw.githubusercontent.com/sleibach/cap-ui-telemetry/78e5d7576ac69d18b807161b4c52c73a3cb28d04/README.md","title":"cap-ui-telemetry — README, FESR capture","checked":"2026-10-15","quote":"**FESR capture** — reads the `SAP-Perf-FESRec` / `SAP-Perf-FESRec-opt` headers UI5 piggybacks onto the next backend request after each completed interaction"}}]}],"requires":[{"ref":"artifact:btp-cloud-logging","requirement":"conditional","role":"log-sink","condition":"The custom fields of the FESR and error records are to be indexed, which is what the README names the binding for.","for":"The records are written through cds.log, and the README lists a bound SAP Cloud Logging instance among the prerequisites so that the custom fields they carry are indexed.","sources":[{"url":"https://raw.githubusercontent.com/sleibach/cap-ui-telemetry/78e5d7576ac69d18b807161b4c52c73a3cb28d04/README.md","title":"cap-ui-telemetry — README, prerequisites","checked":"2026-10-15","quote":"SAP Cloud Logging bound to your CAP app for the custom fields to be indexed"}]}],"provenance":{"discovered_via":[{"source":"source:github","channel":"sleibach"}],"first_seen":"2026-08-31","claimed_by":"actor:sleibach"},"maintainers":["actor:sleibach"],"drafted_with_ai":true,"history":[{"date":"2026-10-15","field":"description.what_it_solves, provides, requires","from":"a bare provides ref and a one-line description","to":"what it does for telemetry, its two stated properties, and the Cloud Logging edge","reason":"Telemetry curation for the CAP door. This is the one option in the corpus answering the boundary the core states, that traces begin when a request arrives, and the entry did not say how it does it or that its records are logs rather than spans. Read against the README at commit 78e5d75."}]},"effective_normative_relations":[{"instrument":"instrument:sap-developer-license-3-2-cap","relation":"use-constrained-by","sections":["1","2","3"],"applies_when":"A cds-plugin is used with SAP CAP materials, or an artifact is explicitly identified as a CAP plugin or application.","note":"This is inherited applicability, not a licence verdict about the artifact itself. Review the agreement for the actual materials and use; an explicit artifact relationship to another revision takes precedence.","scope":{"kind":"artifact"},"sources":[{"url":"https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt","title":"SAP Developer License Agreement 3.2 CAP","checked":"2026-09-16","quote":"documentation, plug-ins, templates, scripts and sample code, libraries, software development kits"}],"inherited_from":"cap-plugins-and-applications","relevant_capabilities":["agent-systems-access","async-processing","data-import-export","database-connectors","deployment","destinations","llm-integration","mcp-servers","plugin-authoring","replication","retrieval-augmented-generation","rfc-connectivity"]}],"readings":{"liveness":[{"label":"Maintenance","tier":"good","evidence":"3 months since release"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-07, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=8.0 — includes cds 10 and 9"},{"label":"Survived majors","tier":"unknown","evidence":"first released after @sap/cds 10 shipped"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"good","evidence":"11 test files, npm test"},{"label":"Docs","tier":"good","evidence":"README 10 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":6,"unit":"installs/week"},{"value":3,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-24","latest_version":"0.1.2","majors":{"0.1":{"version":"0.1.0","date":"2026-07-24"}},"license":"Apache-2.0","first_release":"2026-07-24","last_release":"2026-07-25","releases":3,"cadence_days":0,"maintainers":1,"repository":"git+https://github.com/sleibach/cap-ui-telemetry.git","peer_cds":">=8.0","test_script":true,"types":false,"downloads_weekly":6,"stars":3,"forks":1,"open_issues":0,"archived":false,"pushed_at":"2026-07-25","license_spdx":"Apache-2.0","org_owned":false,"default_branch":"main","contributors":0,"tree_truncated":false,"test_files":11,"workflows":0,"other_ci":false,"readme_bytes":10417,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"readme_path":"README.md","readme_sha":"69f4b078c1c946b3cbb9404fe71be418ac21f500","months_since_release":3,"dormant":false,"repository_directory":null,"dependencies":0,"node_engine":">=18","downloads_monthly":44,"created_at":"2026-07-24T20:00:45Z","open_prs":0,"first_commit":"2026-07-24","last_commit":"2026-07-25","commits":7,"repo_read":"2026-10-24"},"release_notes":{"license":"Apache-2.0","quotable":true,"versions":[{"version":"0.1.2","date":"2026-07-25"},{"version":"0.1.1","date":"2026-07-25"},{"version":"0.1.0","date":"2026-07-24"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:sleibach","name":"Sören Leibach","json":"/actors/sleibach.json"}],"contributors":[],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}