@@ -22,6 +22,7 @@ import (
22
22
23
23
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
24
24
influxdb2api "github.com/influxdata/influxdb-client-go/v2/api"
25
+ log "github.com/sirupsen/logrus"
25
26
)
26
27
27
28
// Backend interface for a time-series DB handling pre-processed planet-exporter data
@@ -34,26 +35,56 @@ type Backend struct {
34
35
35
36
// New returns new influxdb federator backend
36
37
func New (c influxdb2.Client , org , bucket string ) Backend {
38
+ writeAPI := c .WriteAPI (org , bucket )
39
+
40
+ errChan := writeAPI .Errors ()
41
+ go func () {
42
+ for err := range errChan {
43
+ log .Errorf ("Async error received on influxdb writes API: %v" , err )
44
+ }
45
+ }()
46
+
37
47
return Backend {
38
48
client : c ,
39
- writeAPI : c . WriteAPI ( org , bucket ) ,
49
+ writeAPI : writeAPI ,
40
50
org : org ,
41
51
bucket : bucket ,
42
52
}
43
53
}
44
54
45
55
const (
56
+ // Measurements
57
+
58
+ upstreamServiceMeasurement = "upstream"
59
+ downstreamServiceMeasurement = "downstream"
60
+
46
61
ingressDirectionMeasurement = "ingress"
47
62
egressDirectionMeasurement = "egress"
48
63
unknownDirectionMeasurement = "unknown"
49
64
50
- localServiceHostgroupTag = "service"
51
- localServiceAddressTag = "address"
65
+ // Tags
66
+
67
+ localServiceHostgroupTag = "service"
68
+ localServiceAddressTag = "address"
69
+ localServicePortTag = "port"
70
+ localServiceProcessNameTag = "process_name"
52
71
53
72
remoteServiceHostgroupTag = "remote_service"
54
73
remoteServiceAddressTag = "remote_address"
55
74
56
- bandwidthBpsField = "bandwidth_bps"
75
+ upstreamServiceHostgroupTag = "upstream_service"
76
+ upstreamServiceAddressTag = "upstream_address"
77
+ upstreamServicePortTag = "upstream_port"
78
+
79
+ downstreamServiceHostgroupTag = "upstream_service"
80
+ downstreamServiceAddressTag = "upstream_address"
81
+
82
+ protocolTag = "protocol"
83
+
84
+ // Fields
85
+
86
+ bandwidthBpsField = "bandwidth_bps"
87
+ serviceDependencyField = "service_dependency"
57
88
)
58
89
59
90
// AddTrafficBandwidthData adds a service's ingress bytes data point
@@ -93,6 +124,40 @@ func (b Backend) addBytesMeasurement(ctx context.Context, measurement string, tr
93
124
return nil
94
125
}
95
126
127
+ // AddUpstreamService adds an upstream service dependency of a service
128
+ func (b Backend ) AddUpstreamService (ctx context.Context , upstreamService federator.UpstreamService , t time.Time ) error {
129
+ dataPoint := influxdb2 .NewPointWithMeasurement (upstreamServiceMeasurement ).
130
+ AddTag (localServiceHostgroupTag , upstreamService .LocalHostgroup ).
131
+ AddTag (localServiceAddressTag , upstreamService .LocalAddress ).
132
+ AddTag (upstreamServiceHostgroupTag , upstreamService .UpstreamHostgroup ).
133
+ AddTag (upstreamServiceAddressTag , upstreamService .UpstreamAddress ).
134
+ AddTag (upstreamServicePortTag , upstreamService .UpstreamPort ).
135
+ AddTag (localServiceProcessNameTag , upstreamService .LocalProcessName ).
136
+ AddTag (protocolTag , upstreamService .Protocol ).
137
+ AddField (serviceDependencyField , 1 ).
138
+ SetTime (t )
139
+ b .writeAPI .WritePoint (dataPoint )
140
+
141
+ return nil
142
+ }
143
+
144
+ // AddDownstreamService adds a downstream service dependency of a service
145
+ func (b Backend ) AddDownstreamService (ctx context.Context , downstreamService federator.DownstreamService , t time.Time ) error {
146
+ dataPoint := influxdb2 .NewPointWithMeasurement (downstreamServiceMeasurement ).
147
+ AddTag (localServiceHostgroupTag , downstreamService .LocalHostgroup ).
148
+ AddTag (localServiceAddressTag , downstreamService .LocalAddress ).
149
+ AddTag (localServicePortTag , downstreamService .LocalPort ).
150
+ AddTag (localServiceProcessNameTag , downstreamService .LocalProcessName ).
151
+ AddTag (downstreamServiceHostgroupTag , downstreamService .DownstreamHostgroup ).
152
+ AddTag (downstreamServiceAddressTag , downstreamService .DownstreamAddress ).
153
+ AddTag (protocolTag , downstreamService .Protocol ).
154
+ AddField (serviceDependencyField , 1 ).
155
+ SetTime (t )
156
+ b .writeAPI .WritePoint (dataPoint )
157
+
158
+ return nil
159
+ }
160
+
96
161
// Flush all influxdb writes
97
162
func (b Backend ) Flush () {
98
163
b .writeAPI .Flush ()
0 commit comments