add more logging
This commit is contained in:
parent
b5a12c4926
commit
0f9112e8dd
1 changed files with 90 additions and 71 deletions
161
go/main.go
161
go/main.go
|
@ -16,17 +16,17 @@ import (
|
|||
|
||||
type StatusResponse struct {
|
||||
Data []struct {
|
||||
ID int `json:"id"`
|
||||
User struct {
|
||||
ID int `json:"id"`
|
||||
User struct {
|
||||
DisplayName string `json:"displayName"`
|
||||
Username string `json:"username"`
|
||||
} `json:"userDetails"`
|
||||
Train struct {
|
||||
Trip int `json:"trip"`
|
||||
Category string `json:"category"`
|
||||
LineName string `json:"lineName"`
|
||||
JourneyNumber int `json:"journeyNumber"`
|
||||
Origin struct {
|
||||
Trip int `json:"trip"`
|
||||
Category string `json:"category"`
|
||||
LineName string `json:"lineName"`
|
||||
JourneyNumber int `json:"journeyNumber"`
|
||||
Origin struct {
|
||||
Name string `json:"name"`
|
||||
DeparturePlanned string `json:"departurePlanned"`
|
||||
DepartureReal string `json:"departureReal"`
|
||||
|
@ -87,31 +87,31 @@ func fetchStatuses(username string) (*StatusResponse, error) {
|
|||
client := &http.Client{Timeout: 10 * time.Second}
|
||||
req, err := http.NewRequest("GET", url, 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")
|
||||
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("Accept", "application/json")
|
||||
|
||||
resp, err := client.Do(req)
|
||||
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()
|
||||
|
||||
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
|
||||
err = json.NewDecoder(resp.Body).Decode(&apiResponse)
|
||||
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
|
||||
}
|
||||
|
@ -121,51 +121,51 @@ func fetchUserDetails(username string) (*UserDetailsResponse, error) {
|
|||
client := &http.Client{Timeout: 10 * time.Second}
|
||||
req, err := http.NewRequest("GET", url, 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")
|
||||
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("Accept", "application/json")
|
||||
|
||||
resp, err := client.Do(req)
|
||||
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()
|
||||
|
||||
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
|
||||
err = json.NewDecoder(resp.Body).Decode(&apiResponse)
|
||||
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
|
||||
}
|
||||
|
||||
func isTrainActive(departureTimeStr, arrivalTimeStr string) bool {
|
||||
if departureTimeStr == "" || arrivalTimeStr == "" {
|
||||
return false
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
departureTime, err := time.Parse(time.RFC3339, departureTimeStr)
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Parsen der Abfahrtszeit: %v\n", err)
|
||||
return false
|
||||
}
|
||||
log.Printf("Fehler beim Parsen der Abfahrtszeit: %v\n", err)
|
||||
return false
|
||||
}
|
||||
|
||||
arrivalTime, err := time.Parse(time.RFC3339, arrivalTimeStr)
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Parsen der Ankunftszeit: %v\n", err)
|
||||
return false
|
||||
}
|
||||
log.Printf("Fehler beim Parsen der Ankunftszeit: %v\n", err)
|
||||
return false
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
return now.After(departureTime) && now.Before(arrivalTime)
|
||||
|
@ -174,38 +174,57 @@ func isTrainActive(departureTimeStr, arrivalTimeStr string) bool {
|
|||
func updateMetricsForUser(username string) {
|
||||
statusData, err := fetchStatuses(username)
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Abrufen der Statusdaten für Benutzer '%s': %v\n", username, err)
|
||||
return
|
||||
}
|
||||
log.Printf("Fehler beim Abrufen der Statusdaten für Benutzer '%s': %v\n", username, err)
|
||||
return
|
||||
}
|
||||
|
||||
userDetails, err := fetchUserDetails(username)
|
||||
if err != nil {
|
||||
log.Printf("Fehler beim Abrufen der Benutzerdetails für Benutzer '%s': %v\n", username, err)
|
||||
return
|
||||
}
|
||||
log.Printf("Fehler beim Abrufen der Benutzerdetails für Benutzer '%s': %v\n", username, err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, trip := range statusData.Data {
|
||||
active := isTrainActive(trip.Train.Origin.DepartureReal, trip.Train.Destination.ArrivalReal)
|
||||
active := isTrainActive(trip.Train.Origin.DepartureReal, trip.Train.Destination.ArrivalReal)
|
||||
|
||||
tripType := "unknown"
|
||||
switch trip.Train.TripType {
|
||||
case 0:
|
||||
tripType = "personal"
|
||||
case 1:
|
||||
tripType = "business"
|
||||
case 2:
|
||||
tripType = "commute"
|
||||
}
|
||||
tripType := "unknown"
|
||||
switch trip.Train.TripType {
|
||||
case 0:
|
||||
tripType = "personal"
|
||||
case 1:
|
||||
tripType = "business"
|
||||
case 2:
|
||||
tripType = "commute"
|
||||
}
|
||||
|
||||
currentTrainStatuses.WithLabelValues(
|
||||
username,
|
||||
trip.Train.LineName,
|
||||
trip.Train.Origin.Name,
|
||||
trip.Train.Destination.Name,
|
||||
trip.Train.Category,
|
||||
tripType,
|
||||
).Set(func() float64 { if active { return 1 } else { return 0 } }())
|
||||
}
|
||||
currentTrainStatuses.WithLabelValues(
|
||||
username,
|
||||
trip.Train.LineName,
|
||||
trip.Train.Origin.Name,
|
||||
trip.Train.Destination.Name,
|
||||
trip.Train.Category,
|
||||
tripType,
|
||||
).Set(func() float64 {
|
||||
if active {
|
||||
return 1
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}())
|
||||
|
||||
if active {
|
||||
log.Printf("Aktive Verbindung für Benutzer '%s':\n", username)
|
||||
log.Printf(" Linie: %s\n", trip.Train.LineName)
|
||||
log.Printf(" Startbahnhof: %s\n", trip.Train.Origin.Name)
|
||||
log.Printf(" Geplante Abfahrt: %s\n", trip.Train.Origin.DeparturePlanned)
|
||||
log.Printf(" Tatsächliche Abfahrt: %s\n", trip.Train.Origin.DepartureReal)
|
||||
log.Printf(" Zielbahnhof: %s\n", trip.Train.Destination.Name)
|
||||
log.Printf(" Geplante Ankunft: %s\n", trip.Train.Destination.ArrivalPlanned)
|
||||
log.Printf(" Tatsächliche Ankunft: %s\n", trip.Train.Destination.ArrivalReal)
|
||||
log.Printf(" Zugtyp: %s\n", trip.Train.Category)
|
||||
log.Printf(" Fahrtart: %s\n", tripType)
|
||||
}
|
||||
}
|
||||
|
||||
totalTrainDistance.WithLabelValues(username).Set(float64(userDetails.Data.TrainDistance) / 1000)
|
||||
totalTrainDuration.WithLabelValues(username).Set(float64(userDetails.Data.TrainDuration))
|
||||
|
@ -218,23 +237,23 @@ func updateMetricsForUser(username string) {
|
|||
func updateMetrics() {
|
||||
usernames := os.Getenv("TRAEWELLING_USERNAMES")
|
||||
if usernames == "" {
|
||||
log.Println("TRAEWELLING_USERNAMES ist nicht gesetzt")
|
||||
return
|
||||
}
|
||||
log.Println("TRAEWELLING_USERNAMES ist nicht gesetzt")
|
||||
return
|
||||
}
|
||||
|
||||
for _, username := range strings.Split(usernames, ",") {
|
||||
username = strings.TrimSpace(username)
|
||||
updateMetricsForUser(username)
|
||||
}
|
||||
username = strings.TrimSpace(username)
|
||||
updateMetricsForUser(username)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
go func() {
|
||||
for {
|
||||
updateMetrics()
|
||||
time.Sleep(5 * time.Minute) // Aktualisierung alle 5 Minuten
|
||||
}
|
||||
}()
|
||||
for {
|
||||
updateMetrics()
|
||||
time.Sleep(5 * time.Minute) // Aktualisierung alle 5 Minuten
|
||||
}
|
||||
}()
|
||||
|
||||
http.Handle("/metrics", promhttp.Handler())
|
||||
fmt.Println("Server läuft auf Port 8080...")
|
||||
|
|
Loading…
Add table
Reference in a new issue