Skip to content

Commit dbe7ff9

Browse files
committed
STAC-23353: Make topology sync metrics work
1 parent 3566b8e commit dbe7ff9

File tree

10 files changed

+140
-373
lines changed

10 files changed

+140
-373
lines changed

cmd/health/health_status.go

Lines changed: 10 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -118,39 +118,14 @@ func RunStreamStatus(cli *di.Deps, api *stackstate_api.APIClient, args *StatusAr
118118
return nil
119119
}
120120

121-
func metricValueOrDash(bucket []stackstate_api.MetricBucketValue, index int) interface{} {
122-
if index < len(bucket) && bucket[index].HasValue() {
123-
return bucket[index].GetValue()
124-
}
125-
return "-"
126-
}
127-
128-
func metricBucketToJson(name string, bucket []stackstate_api.MetricBucketValue, size int32) map[string]interface{} {
129-
return map[string]interface{}{
130-
"name": name,
131-
fmt.Sprintf("now-%d", size): metricValueOrDash(bucket, 0),
132-
fmt.Sprintf("%d-%d", size, 2*size): metricValueOrDash(bucket, 1), //nolint:mnd
133-
fmt.Sprintf("%d-%d", 2*size, 3*size): metricValueOrDash(bucket, 2), //nolint:mnd
134-
}
135-
}
136-
137121
func streamMetricsToJson(metrics stackstate_api.HealthStreamMetrics) []map[string]interface{} {
138122
size := metrics.BucketSizeSeconds
139123
return []map[string]interface{}{
140-
metricBucketToJson("latency seconds", metrics.LatencySeconds, size),
141-
metricBucketToJson("messages per seconds", metrics.MessagePerSecond, size),
142-
metricBucketToJson("creates per seconds", metrics.CreatesPerSecond, size),
143-
metricBucketToJson("updates per seconds", metrics.UpdatesPerSecond, size),
144-
metricBucketToJson("deletes per seconds", metrics.DeletesPerSecond, size),
145-
}
146-
}
147-
148-
func metricBucketToRow(name string, bucket []stackstate_api.MetricBucketValue) []interface{} {
149-
return []interface{}{
150-
name,
151-
metricValueOrDash(bucket, 0),
152-
metricValueOrDash(bucket, 1),
153-
metricValueOrDash(bucket, 2), //nolint:mnd
124+
printer.MetricBucketToJson("latency seconds", metrics.LatencySeconds, size),
125+
printer.MetricBucketToJson("messages per seconds", metrics.MessagePerSecond, size),
126+
printer.MetricBucketToJson("creates per seconds", metrics.CreatesPerSecond, size),
127+
printer.MetricBucketToJson("updates per seconds", metrics.UpdatesPerSecond, size),
128+
printer.MetricBucketToJson("deletes per seconds", metrics.DeletesPerSecond, size),
154129
}
155130
}
156131

@@ -159,11 +134,11 @@ func streamMetricsToTable(metrics stackstate_api.HealthStreamMetrics) printer.Ta
159134
return printer.TableData{
160135
Header: []string{"Metric", fmt.Sprintf("%ds ago", size), fmt.Sprintf("%d-%ds ago", size, 2*size), fmt.Sprintf("%d-%ds ago", 2*size, 3*size)}, //nolint:mnd
161136
Data: [][]interface{}{
162-
metricBucketToRow("latency seconds", metrics.LatencySeconds),
163-
metricBucketToRow("messages per seconds", metrics.MessagePerSecond),
164-
metricBucketToRow("creates per seconds", metrics.CreatesPerSecond),
165-
metricBucketToRow("updates per seconds", metrics.UpdatesPerSecond),
166-
metricBucketToRow("deletes per seconds", metrics.DeletesPerSecond),
137+
printer.MetricBucketToRow("latency seconds", metrics.LatencySeconds),
138+
printer.MetricBucketToRow("messages per seconds", metrics.MessagePerSecond),
139+
printer.MetricBucketToRow("creates per seconds", metrics.CreatesPerSecond),
140+
printer.MetricBucketToRow("updates per seconds", metrics.UpdatesPerSecond),
141+
printer.MetricBucketToRow("deletes per seconds", metrics.DeletesPerSecond),
167142
},
168143
MissingTableDataMsg: printer.NotFoundMsg{Types: "metrics"},
169144
}

cmd/topologysync/topologysync_describe.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,18 @@ func RunDescribeCommand(args *DescribeArgs) di.CmdWithApiFn {
7272
sync.Item,
7373
}))
7474

75+
if sync.Metrics != nil {
76+
cli.Printer.PrintLn("\nTopology Synchronization Metrics:")
77+
size := sync.Metrics.BucketSizeSeconds
78+
cli.Printer.Table(printer.TableData{
79+
Header: []string{"Metric", fmt.Sprintf("%ds ago", size), fmt.Sprintf("%d-%ds ago", size, 2*size), fmt.Sprintf("%d-%ds ago", 2*size, 3*size)}, //nolint:mnd
80+
Data: [][]interface{}{
81+
printer.MetricBucketToRow("latency seconds", sync.Metrics.LatencySeconds),
82+
},
83+
MissingTableDataMsg: printer.NotFoundMsg{Types: "metrics"},
84+
})
85+
}
86+
7587
data := make([][]interface{}, len(sync.ErrorDetails))
7688
for i, error := range sync.ErrorDetails {
7789
id := "-"

generated/stackstate_api/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@ Class | Method | HTTP request | Description
217217
*TopicApi* | [**Describe**](docs/TopicApi.md#describe) | **Get** /topic/{topic} | Describe a topic
218218
*TopicApi* | [**List**](docs/TopicApi.md#list) | **Get** /topic | List topics
219219
*TopologySynchronizationApi* | [**GetTopologySynchronizationStreamById**](docs/TopologySynchronizationApi.md#gettopologysynchronizationstreambyid) | **Get** /synchronization/topology/streams/sync | Overview of a specific Topology Stream, queried by node id or sync identifier
220-
*TopologySynchronizationApi* | [**GetTopologySynchronizationStreamStatusById**](docs/TopologySynchronizationApi.md#gettopologysynchronizationstreamstatusbyid) | **Get** /synchronization/topology/streams/status | Metrics of a specific Topology Stream, queried by node id
221220
*TopologySynchronizationApi* | [**GetTopologySynchronizationStreams**](docs/TopologySynchronizationApi.md#gettopologysynchronizationstreams) | **Get** /synchronization/topology/streams | Overview of the topology synchronization streams
222221
*TopologySynchronizationApi* | [**PostTopologySynchronizationStreamClearErrors**](docs/TopologySynchronizationApi.md#posttopologysynchronizationstreamclearerrors) | **Post** /synchronization/topology/streams/clearErrors | Clear all the errors related to a specific sync
223222
*TracesApi* | [**GetSpan**](docs/TracesApi.md#getspan) | **Get** /traces/{traceId}/spans/{spanId} | Get a span

generated/stackstate_api/api/openapi.yaml

Lines changed: 23 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -3402,46 +3402,6 @@ paths:
34023402
required: true
34033403
schema:
34043404
$ref: '#/components/schemas/IdentifierType'
3405-
/synchronization/topology/streams/status:
3406-
get:
3407-
description: "Metrics of a specific Topology Stream, queried by node id"
3408-
operationId: getTopologySynchronizationStreamStatusById
3409-
parameters:
3410-
- allowReserved: true
3411-
in: query
3412-
name: identifier
3413-
required: true
3414-
schema:
3415-
type: string
3416-
responses:
3417-
"200":
3418-
content:
3419-
application/json:
3420-
schema:
3421-
$ref: '#/components/schemas/TopologyStreamMetrics'
3422-
description: A specific topology stream metrics
3423-
"400":
3424-
content:
3425-
application/json:
3426-
schema:
3427-
$ref: '#/components/schemas/InvalidSyncIdentifier'
3428-
description: Bad request when specifying an invalid identifier
3429-
"404":
3430-
content:
3431-
application/json:
3432-
schema:
3433-
$ref: '#/components/schemas/TopologySyncError'
3434-
description: Sync with given identifier not found
3435-
summary: "Metrics of a specific Topology Stream, queried by node id"
3436-
tags:
3437-
- topologySynchronization
3438-
parameters:
3439-
- allowReserved: true
3440-
in: query
3441-
name: identifier
3442-
required: true
3443-
schema:
3444-
type: string
34453405
/synchronization/topology/streams/clearErrors:
34463406
parameters:
34473407
- allowReserved: true
@@ -10230,6 +10190,11 @@ components:
1023010190
errors: 2
1023110191
createdComponents: 5
1023210192
status: null
10193+
metrics:
10194+
latencySeconds:
10195+
- value: 5.637376656633329
10196+
- value: 5.637376656633329
10197+
bucketSizeSeconds: 0
1023310198
errorDetails:
1023410199
- level: null
1023510200
externalId: externalId
@@ -10244,6 +10209,8 @@ components:
1024410209
items:
1024510210
$ref: '#/components/schemas/TopologyStreamError'
1024610211
type: array
10212+
metrics:
10213+
$ref: '#/components/schemas/TopologyStreamMetrics'
1024710214
required:
1024810215
- errorDetails
1024910216
- item
@@ -10268,6 +10235,22 @@ components:
1026810235
- level
1026910236
- message
1027010237
type: object
10238+
TopologyStreamMetrics:
10239+
example:
10240+
latencySeconds:
10241+
- value: 5.637376656633329
10242+
- value: 5.637376656633329
10243+
bucketSizeSeconds: 0
10244+
properties:
10245+
bucketSizeSeconds:
10246+
type: integer
10247+
latencySeconds:
10248+
items:
10249+
$ref: '#/components/schemas/MetricBucketValue'
10250+
type: array
10251+
required:
10252+
- bucketSizeSeconds
10253+
type: object
1027110254
IdentifierType:
1027210255
enum:
1027310256
- NodeId
@@ -10287,22 +10270,6 @@ components:
1028710270
required:
1028810271
- message
1028910272
type: object
10290-
TopologyStreamMetrics:
10291-
example:
10292-
latencySeconds:
10293-
- value: 5.637376656633329
10294-
- value: 5.637376656633329
10295-
bucketSizeSeconds: 0
10296-
properties:
10297-
bucketSizeSeconds:
10298-
type: integer
10299-
latencySeconds:
10300-
items:
10301-
$ref: '#/components/schemas/MetricBucketValue'
10302-
type: array
10303-
required:
10304-
- bucketSizeSeconds
10305-
type: object
1030610273
ExecuteScriptResponse:
1030710274
example:
1030810275
result: "{}"

0 commit comments

Comments
 (0)