saphoooo / freebox_exporter

A prometheus exporter for freebox stats
Apache License 2.0
52 stars 26 forks source link

panic: runtime error: index out of range (compatibilité fibre) #8

Closed finkr closed 5 years ago

finkr commented 5 years ago

Bonjour,

J'ai une Freebox révolution (v6) connectée à la fibre.

L'application ne fonctionne pas, j'ai le message d'erreur suivant :

goroutine 45 [running]: main.getDsl(0xc0000384a8, 0x4a8a85, 0x8589b4, 0x1c) /getdsl.go:74 +0xf96 main.main.func1(0x8c25c0, 0xc0000ac440, 0x8c25c0, 0xc0000ac480, 0x8c25c0, 0xc0000ac4c0, 0x8c25c0, 0xc0000ac500, 0x8c25c0, 0xc0000ac540, ...) /main.go:187 +0x440 created by main.main /main.go:184 +0xd50 successfully authenticated panic: runtime error: index out of range

En capturant le trafic, il semble que le problème provienne de l'appel à /api/v6/rrd qui ne retourne pas de données pour dsl (je suis connecté avec la fibre).

POST /api/v6/rrd/ HTTP/1.1 {"db":"dsl","date_start":1553652831,"precision":10,"fields":"rate_up","rate_down","snr_up","snr_down"]}

HTTP/1.1 200 OK Content-Type: application/json; charset=utf-8 {"success":true,"result":{"date_start":1553652820,"data":{},"date_end":1553652832}}


Pour information, l'API https://mafreebox.freebox.fr/api/v6/connection retourne :

{
   "result" : {
      "type" : "ethernet",
      "ipv4" : "0.0.0.0",
      "ipv6" : "1234:1234:1234::1",
      "bandwidth_up" : 400000000,
      "bandwidth_down" : 1000000000,
      "ipv4_port_range" : [
         0,
         65535
      ],
      "bytes_down" : 5755680161,
      "rate_down" : 680,
      "media" : "ftth",
      "state" : "up",
      "bytes_up" : 239798521,
      "rate_up" : 105
   },
   "success" : true
}

Remarque : l'utilisation de l'API /api/v6/connection semble en fait préférable et plus en phase avec l'approche de Prometheus. Au lieu de récupérer une valeur instantané (rate_up et rate_down de type GAUGE), on peut utiliser des compteurs (bytes_up et byte_down de type COUNTER) et la fonction rate() de PromQL pour calculer la de débit moyen entre deux collecte (les pics et les creux entre deux collectes ne passent pas inaperçu). Voir https://www.robustperception.io/how-does-a-prometheus-counter-work

J'ai hâte de pouvoir utiliser l'exporter

merci

Franklin

finkr commented 5 years ago

En fait, le problème se pose également avec les db RRD switch et temp.

json retourné pour le RRD temp:

{"msg":"Erreur lors de la r��cup��ration des statistiques : Erreur lors de la lecture de la base RRD","success":false,"error_code":"db_error"}

json retourné pour le RRD switch:

{"msg":"Erreur lors de la r��cup��ration des statistiques : Erreur lors de la lecture de la base RRD","success":false,"error_code":"db_error"}

saphoooo commented 5 years ago

Bonjour,

C'est normalement corrigé, j'ai mis un check pour vérifié que l'array n'était pas vide.

finkr commented 5 years ago

Merci, ça fonctionne.

Bonne journée