Hinzufügen von Zugdaten
This commit is contained in:
parent
81da1334bc
commit
489f7bb509
1 changed files with 50 additions and 42 deletions
92
go/main.go
92
go/main.go
|
@ -51,12 +51,12 @@ type UserDetailsResponse struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
currentConnections = promauto.NewGaugeVec(
|
currentTrainStatuses = promauto.NewGaugeVec(
|
||||||
prometheus.GaugeOpts{
|
prometheus.GaugeOpts{
|
||||||
Name: "traewelling_current_connections",
|
Name: "traewelling_current_train_statuses",
|
||||||
Help: "Anzahl der aktuellen Verbindungen pro Benutzer",
|
Help: "Anzahl der aktuellen Züge eines Benutzers",
|
||||||
},
|
},
|
||||||
[]string{"username"},
|
[]string{"username", "line_name", "origin", "destination"},
|
||||||
)
|
)
|
||||||
totalTrainDistance = promauto.NewGaugeVec(
|
totalTrainDistance = promauto.NewGaugeVec(
|
||||||
prometheus.GaugeOpts{
|
prometheus.GaugeOpts{
|
||||||
|
@ -86,31 +86,31 @@ func fetchStatuses(username string) (*StatusResponse, error) {
|
||||||
client := &http.Client{Timeout: 10 * time.Second}
|
client := &http.Client{Timeout: 10 * time.Second}
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Fehler beim Erstellen der Anfrage: %v", err)
|
return nil, fmt.Errorf("Fehler beim Erstellen der Anfrage: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
token := os.Getenv("TRAEWELLING_TOKEN")
|
token := os.Getenv("TRAEWELLING_TOKEN")
|
||||||
if token == "" {
|
if token == "" {
|
||||||
return nil, fmt.Errorf("TRAEWELLING_TOKEN ist nicht gesetzt")
|
return nil, fmt.Errorf("TRAEWELLING_TOKEN ist nicht gesetzt")
|
||||||
}
|
}
|
||||||
req.Header.Set("Authorization", "Bearer "+token)
|
req.Header.Set("Authorization", "Bearer "+token)
|
||||||
req.Header.Set("Accept", "application/json")
|
req.Header.Set("Accept", "application/json")
|
||||||
|
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Fehler beim Senden der Anfrage für Benutzer '%s': %v", username, err)
|
return nil, fmt.Errorf("Fehler beim Senden der Anfrage für Benutzer '%s': %v", username, err)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return nil, fmt.Errorf("Fehlerhafte Antwort für Benutzer '%s': %d", username, resp.StatusCode)
|
return nil, fmt.Errorf("Fehlerhafte Antwort für Benutzer '%s': %d", username, resp.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
var apiResponse StatusResponse
|
var apiResponse StatusResponse
|
||||||
err = json.NewDecoder(resp.Body).Decode(&apiResponse)
|
err = json.NewDecoder(resp.Body).Decode(&apiResponse)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Fehler beim Parsen der JSON-Daten für Benutzer '%s': %v", username, err)
|
return nil, fmt.Errorf("Fehler beim Parsen der JSON-Daten für Benutzer '%s': %v", username, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &apiResponse, nil
|
return &apiResponse, nil
|
||||||
}
|
}
|
||||||
|
@ -120,31 +120,31 @@ func fetchUserDetails(username string) (*UserDetailsResponse, error) {
|
||||||
client := &http.Client{Timeout: 10 * time.Second}
|
client := &http.Client{Timeout: 10 * time.Second}
|
||||||
req, err := http.NewRequest("GET", url, nil)
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Fehler beim Erstellen der Benutzerdetail Anfrage: %v", err)
|
return nil, fmt.Errorf("Fehler beim Erstellen der Benutzerdetail Anfrage: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
token := os.Getenv("TRAEWELLING_TOKEN")
|
token := os.Getenv("TRAEWELLING_TOKEN")
|
||||||
if token == "" {
|
if token == "" {
|
||||||
return nil, fmt.Errorf("TRAEWELLING_TOKEN ist nicht gesetzt")
|
return nil, fmt.Errorf("TRAEWELLING_TOKEN ist nicht gesetzt")
|
||||||
}
|
}
|
||||||
req.Header.Set("Authorization", "Bearer "+token)
|
req.Header.Set("Authorization", "Bearer "+token)
|
||||||
req.Header.Set("Accept", "application/json")
|
req.Header.Set("Accept", "application/json")
|
||||||
|
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Fehler beim Senden der Benutzerdetail Anfrage für Benutzer '%s': %v", username, err)
|
return nil, fmt.Errorf("Fehler beim Senden der Benutzerdetail Anfrage für Benutzer '%s': %v", username, err)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return nil, fmt.Errorf("Fehlerhafte Benutzerdetail Antwort für Benutzer '%s': %d", username, resp.StatusCode)
|
return nil, fmt.Errorf("Fehlerhafte Benutzerdetail Antwort für Benutzer '%s': %d", username, resp.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
var apiResponse UserDetailsResponse
|
var apiResponse UserDetailsResponse
|
||||||
err = json.NewDecoder(resp.Body).Decode(&apiResponse)
|
err = json.NewDecoder(resp.Body).Decode(&apiResponse)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("Fehler beim Parsen der JSON-Daten der Benutzerdetails für Benutzer '%s': %v", username, err)
|
return nil, fmt.Errorf("Fehler beim Parsen der JSON-Daten der Benutzerdetails für Benutzer '%s': %v", username, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &apiResponse, nil
|
return &apiResponse, nil
|
||||||
}
|
}
|
||||||
|
@ -152,17 +152,25 @@ func fetchUserDetails(username string) (*UserDetailsResponse, error) {
|
||||||
func updateMetricsForUser(username string) {
|
func updateMetricsForUser(username string) {
|
||||||
statusData, err := fetchStatuses(username)
|
statusData, err := fetchStatuses(username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Fehler beim Abrufen der Statusdaten für Benutzer '%s': %v\n", username, err)
|
log.Printf("Fehler beim Abrufen der Statusdaten für Benutzer '%s': %v\n", username, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
userDetails, err := fetchUserDetails(username)
|
userDetails, err := fetchUserDetails(username)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Fehler beim Abrufen der Benutzerdetails für Benutzer '%s': %v\n", username, err)
|
log.Printf("Fehler beim Abrufen der Benutzerdetails für Benutzer '%s': %v\n", username, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, trip := range statusData.Data {
|
||||||
|
currentTrainStatuses.WithLabelValues(
|
||||||
|
username,
|
||||||
|
trip.Train.LineName,
|
||||||
|
trip.Train.Origin.Name,
|
||||||
|
trip.Train.Destination.Name,
|
||||||
|
).Set(1) // Jede aktive Verbindung wird als 1 gesetzt
|
||||||
|
}
|
||||||
|
|
||||||
currentConnections.WithLabelValues(username).Set(float64(len(statusData.Data)))
|
|
||||||
totalTrainDistance.WithLabelValues(username).Set(float64(userDetails.Data.TrainDistance) / 1000)
|
totalTrainDistance.WithLabelValues(username).Set(float64(userDetails.Data.TrainDistance) / 1000)
|
||||||
totalTrainDuration.WithLabelValues(username).Set(float64(userDetails.Data.TrainDuration))
|
totalTrainDuration.WithLabelValues(username).Set(float64(userDetails.Data.TrainDuration))
|
||||||
totalPoints.WithLabelValues(username).Set(float64(userDetails.Data.Points))
|
totalPoints.WithLabelValues(username).Set(float64(userDetails.Data.Points))
|
||||||
|
@ -174,23 +182,23 @@ func updateMetricsForUser(username string) {
|
||||||
func updateMetrics() {
|
func updateMetrics() {
|
||||||
usernames := os.Getenv("TRAEWELLING_USERNAMES")
|
usernames := os.Getenv("TRAEWELLING_USERNAMES")
|
||||||
if usernames == "" {
|
if usernames == "" {
|
||||||
log.Println("TRAEWELLING_USERNAMES ist nicht gesetzt")
|
log.Println("TRAEWELLING_USERNAMES ist nicht gesetzt")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, username := range strings.Split(usernames, ",") {
|
for _, username := range strings.Split(usernames, ",") {
|
||||||
username = strings.TrimSpace(username)
|
username = strings.TrimSpace(username)
|
||||||
updateMetricsForUser(username)
|
updateMetricsForUser(username)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
updateMetrics()
|
updateMetrics()
|
||||||
time.Sleep(5 * time.Minute)
|
time.Sleep(5 * time.Minute) // Aktualisierung alle 5 Minuten
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
http.Handle("/metrics", promhttp.Handler())
|
http.Handle("/metrics", promhttp.Handler())
|
||||||
fmt.Println("Server läuft auf Port 8080...")
|
fmt.Println("Server läuft auf Port 8080...")
|
||||||
|
|
Loading…
Add table
Reference in a new issue