Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Companion/exporter/exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func NewPrometheusExporter(frmApiHosts []string) *PrometheusExporter {
vehicleStationCollector := NewVehicleStationCollector("/getTruckStation")
trainCollector := NewTrainCollector("/getTrains")
trainStationCollector := NewTrainStationCollector("/getTrainStation")
resourceSinkCollector := NewResourceSinkCollector("/getResourceSinkBuilding")
resourceSinkCollector := NewResourceSinkCollector("/getResourceSinkBuilding", "/getResourceSink")
pumpCollector := NewPumpCollector("/getPump")
extractorCollector := NewExtractorCollector("/getExtractor")
portalCollector := NewPortalCollector("/getPortal")
Expand Down
38 changes: 22 additions & 16 deletions Companion/exporter/frm_server_fake_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,23 @@ import (
)

type FRMServerFake struct {
server *httptest.Server
productionData []exporter.ProductionDetails
powerData []exporter.PowerDetails
factoryBuildings []exporter.BuildingDetail
vehicleData []exporter.VehicleDetails
trainData []exporter.TrainDetails
droneData []exporter.DroneStationDetails
vehicleStationData []exporter.VehicleStationDetails
trainStationData []exporter.TrainStationDetails
resourceSinkData []exporter.ResourceSinkDetails
sessionInfoData exporter.SessionInfo
pumpData []exporter.PumpDetails
extractorData []exporter.ExtractorDetails
portalData []exporter.PortalDetails
hypertubeData []exporter.HypertubeDetails
frackingData []exporter.FrackingDetails
server *httptest.Server
productionData []exporter.ProductionDetails
powerData []exporter.PowerDetails
factoryBuildings []exporter.BuildingDetail
vehicleData []exporter.VehicleDetails
trainData []exporter.TrainDetails
droneData []exporter.DroneStationDetails
vehicleStationData []exporter.VehicleStationDetails
trainStationData []exporter.TrainStationDetails
resourceSinkData []exporter.ResourceSinkDetails
gloalResourceSinkData []exporter.ResourceSinkGlobalDetails
sessionInfoData exporter.SessionInfo
pumpData []exporter.PumpDetails
extractorData []exporter.ExtractorDetails
portalData []exporter.PortalDetails
hypertubeData []exporter.HypertubeDetails
frackingData []exporter.FrackingDetails
}

func NewFRMServerFake() *FRMServerFake {
Expand All @@ -43,6 +44,7 @@ func NewFRMServerFake() *FRMServerFake {
mux.Handle("/getVehicles", http.HandlerFunc(getStatsHandler(&fake.vehicleData)))
mux.Handle("/getTruckStation", http.HandlerFunc(getStatsHandler(&fake.vehicleStationData)))
mux.Handle("/getTrainStation", http.HandlerFunc(getStatsHandler(&fake.trainStationData)))
mux.Handle("/getResourceSink", http.HandlerFunc(getStatsHandler(&fake.gloalResourceSinkData)))
mux.Handle("/getResourceSinkBuilding", http.HandlerFunc(getStatsHandler(&fake.resourceSinkData)))
mux.Handle("/getSessionInfo", http.HandlerFunc(getStatsHandler(&fake.sessionInfoData)))
mux.Handle("/getPump", http.HandlerFunc(getStatsHandler(&fake.pumpData)))
Expand Down Expand Up @@ -104,6 +106,10 @@ func (e *FRMServerFake) ReturnsResourceSinkData(data []exporter.ResourceSinkDeta
e.resourceSinkData = data
}

func (e *FRMServerFake) ReturnsGlobalResourceSinkData(data []exporter.ResourceSinkGlobalDetails) {
e.gloalResourceSinkData = data
}

func (e *FRMServerFake) ReturnsPumpData(data []exporter.PumpDetails) {
e.pumpData = data
}
Expand Down
35 changes: 28 additions & 7 deletions Companion/exporter/resource_sink_collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,52 @@ import (
)

type ResourceSinkCollector struct {
endpoint string
buildingEndpoint string
globalEndpoint string
}

type ResourceSinkDetails struct {
Location Location `json:"location"`
PowerInfo PowerInfo `json:"PowerInfo"`
}

func NewResourceSinkCollector(endpoint string) *ResourceSinkCollector {
type ResourceSinkGlobalDetails struct {
NumCoupon int `json:"NumCoupon"`
TotalPoints int `json:"TotalPoints"`
PointsToCoupon int `json:"PointsToCoupon"`
}

func NewResourceSinkCollector(buildingEndpoint, globalEndpoint string) *ResourceSinkCollector {
return &ResourceSinkCollector{
endpoint: endpoint,
buildingEndpoint: buildingEndpoint,
globalEndpoint: globalEndpoint,
}
}

func (c *ResourceSinkCollector) Collect(frmAddress string, sessionName string) {
details := []ResourceSinkDetails{}
err := retrieveData(frmAddress+c.endpoint, &details)
buildingDetails := []ResourceSinkDetails{}
err := retrieveData(frmAddress+c.buildingEndpoint, &buildingDetails)
if err != nil {
log.Printf("error reading resource sink details statistics from FRM: %s\n", err)
return
}

globalDetails := []ResourceSinkGlobalDetails{}
err = retrieveData(frmAddress+c.globalEndpoint, &globalDetails)
if err != nil {
log.Printf("error reading vehicle station statistics from FRM: %s\n", err)
log.Printf("error reading global resource sink statistics from FRM: %s\n", err)
return
}

for _, d := range globalDetails {
ResourceSinkTotalPoints.WithLabelValues(frmAddress, sessionName).Set(float64(d.TotalPoints))
ResourceSinkPointsToCoupon.WithLabelValues(frmAddress, sessionName).Set(float64(d.PointsToCoupon))
ResourceSinkCollectedCoupons.WithLabelValues(frmAddress, sessionName).Set(float64(d.NumCoupon))
}

powerInfo := map[float64]float64{}
maxPowerInfo := map[float64]float64{}
for _, d := range details {
for _, d := range buildingDetails {
val, ok := powerInfo[d.PowerInfo.CircuitGroupId]
if ok {
powerInfo[d.PowerInfo.CircuitGroupId] = val + d.PowerInfo.PowerConsumed
Expand Down
37 changes: 36 additions & 1 deletion Companion/exporter/resource_sink_collector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ var _ = Describe("ResourceSinkCollector", func() {
BeforeEach(func() {
FRMServer.Reset()
url = FRMServer.server.URL
collector = exporter.NewResourceSinkCollector("/getResourceSinkBuilding")
collector = exporter.NewResourceSinkCollector("/getResourceSinkBuilding", "/getResourceSink")

FRMServer.ReturnsResourceSinkData([]exporter.ResourceSinkDetails{
{
Expand All @@ -39,6 +39,14 @@ var _ = Describe("ResourceSinkCollector", func() {
},
},
})

FRMServer.ReturnsGlobalResourceSinkData([]exporter.ResourceSinkGlobalDetails{
{
TotalPoints: 100,
PointsToCoupon: 200,
NumCoupon: 1,
},
})
})

AfterEach(func() {
Expand All @@ -63,4 +71,31 @@ var _ = Describe("ResourceSinkCollector", func() {
Expect(val).To(Equal(90.0))
})
})

Describe("Resource sink global metrics collection", func() {
It("sets the 'resource_sink_total_points' metric with the right labels", func() {
collector.Collect(url, sessionName)

val, err := gaugeValue(exporter.ResourceSinkTotalPoints, url, sessionName)

Expect(err).ToNot(HaveOccurred())
Expect(val).To(Equal(100.0))
})
It("sets the 'resource_sink_points_to_coupon' metric with the right labels", func() {
collector.Collect(url, sessionName)

val, err := gaugeValue(exporter.ResourceSinkPointsToCoupon, url, sessionName)

Expect(err).ToNot(HaveOccurred())
Expect(val).To(Equal(200.0))
})
It("sets the 'resource_sink_collected_coupons' metric with the right labels", func() {
collector.Collect(url, sessionName)

val, err := gaugeValue(exporter.ResourceSinkCollectedCoupons, url, sessionName)

Expect(err).ToNot(HaveOccurred())
Expect(val).To(Equal(1.0))
})
})
})
15 changes: 15 additions & 0 deletions Companion/exporter/resource_sink_metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,19 @@ var (
}, []string{
"circuit_id",
})

ResourceSinkTotalPoints = RegisterNewGaugeVec(prometheus.GaugeOpts{
Name: "resource_sink_total_points",
Help: "AWESOME sink total points",
}, []string{})

ResourceSinkPointsToCoupon = RegisterNewGaugeVec(prometheus.GaugeOpts{
Name: "resource_sink_points_to_coupon",
Help: "AWESOME sink points to next coupon",
}, []string{})

ResourceSinkCollectedCoupons = RegisterNewGaugeVec(prometheus.GaugeOpts{
Name: "resource_sink_collected_coupons",
Help: "AWESOME sink collected coupons",
}, []string{})
)
4 changes: 1 addition & 3 deletions Companion/go.mod
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
module github.com/AP-Hunt/FicsitRemoteMonitoringCompanion/Companion

go 1.22.0

toolchain go1.23.0
go 1.23.4

require (
github.com/coder/quartz v0.1.2
Expand Down
Loading