UNPKG

openclaw-grafana-lens

Version:

OpenClaw plugin that gives AI agents full Grafana access — 18 composable tools for PromQL/LogQL/TraceQL queries, dashboard creation, alerting, SRE investigation, security monitoring, data collection pipeline management via Grafana Alloy (29 recipes), and

62 lines (61 loc) 2.34 kB
import { AlloyConfigBuilder, componentLabel, escapeString, renderValue } from "../../config-builder.js"; const recipe = { name: "faro-frontend", category: "logs", signal: "logs", summary: "Receive frontend telemetry from the Grafana Faro Web SDK — browser errors, performance metrics, web vitals, and user sessions", dashboardTemplate: null, credentialParams: [], requiredParams: [], optionalParams: [ { name: "listenPort", type: "number", description: "HTTP listen port for Faro receiver", default: 12347 }, { name: "listenAddress", type: "string", description: "Listen address", default: "0.0.0.0" }, { name: "corsAllowedOrigins", type: "object", description: 'CORS allowed origins (string array). Default: ["*"] (all origins)', default: ["*"], }, ], generateConfig(pipelineId, params, targets, _pipelineName) { const listenPort = params.listenPort ?? 12347; const listenAddress = params.listenAddress || "0.0.0.0"; const corsOrigins = params.corsAllowedOrigins ?? ["*"]; const recvLabel = componentLabel(pipelineId, "faro"); const writeLabel = componentLabel(pipelineId, "write"); return new AlloyConfigBuilder() .addBlock(`faro.receiver "${recvLabel}" { server { listen_address = "${escapeString(listenAddress)}" listen_port = ${listenPort} cors_allowed_origins = ${renderValue(corsOrigins)} } output { logs = [loki.write.${writeLabel}.receiver] } }`) .addBlock(`loki.write "${writeLabel}" { endpoint { url = "${escapeString(targets.lokiWriteUrl)}" } }`) .build(pipelineId, "faro-frontend", "faro-frontend"); }, sampleQueries() { return { allFaroLogs: `{service_name="faro-web-sdk"}`, browserErrors: `{service_name="faro-web-sdk"} |= "error"`, webVitals: `{service_name="faro-web-sdk"} | json | kind="measurement"`, }; }, componentIds(pipelineId) { return [ `faro.receiver.${componentLabel(pipelineId, "faro")}`, `loki.write.${componentLabel(pipelineId, "write")}`, ]; }, boundPorts(params) { return [params.listenPort ?? 12347]; }, }; export default recipe;