Closed itwars closed 5 years ago
Ok, I'll have a look to this. Have you more context (freebox adsl vs fiber, etc)?
Freebox Revolution avec la fibre avec la dernière version de firmware. Le message concernant json se répète à intervalle régulier, visiblement c'est la struct rdd :
type rrd struct {
UID string `json:"uid,omitempty"`
Success bool `json:"success"`
Msg string `json:"msg,omitempty"`
Result struct {
DateStart int `json:"date_start,omitempty"`
DateEnd int `json:"date_end,omitempty"`
Data []map[string]int `json:"data,omitempty"`
} `json:"result"`
ErrorCode string `json:"error_code"`
}
Le problème n'est pas tout à fait là ; en réalité, les freebox fibre ne renvoient pas de statistiques en RRD (il y a déjà eu une issue à ce sujet). Dans la version précédente, lorsque la DB RRD ne revoyait pas de statistiques, je mettais les résultats à 0 partout. Je n'ai pas pris cet aspect en compte lors du refactoring, ce qui explique le message d'erreur. Je vais faire les modifications nécessaire.
Marrant, car j'ai bien les métriques dans grafana Et ça correspond bien aux graphes donnés par le Freebox !
Si ça peut t'aider, j'ai vu ce repo : https://github.com/trazfr/freebox-exporter/blob/master/fbx/get_metrics.go
Il faut que je détermine laquelle des métriques posent problème ; je vais voir pour que la métrique ayant poser problème soit explicitement mentionnée dans le message d'erreur, histoire de réduire le champ d'investigations.
Si tu peux faire un essai avec la v1.1.2, elle ne corrige pas de problème mais devrait donner un meilleur message d'erreur
Pareil ...
2019/08/26 20:01:17 freebox_exporter started on port :10001
2019/08/26 20:01:22 json: cannot unmarshal object into Go struct field .data of type []map[string]int
2019/08/26 20:01:32 json: cannot unmarshal object into Go struct field .data of type []map[string]int
2019/08/26 20:01:43 json: cannot unmarshal object into Go struct field .data of type []map[string]int
Aucune autre info ! Je pense que ce message viens des libs Prometheus ?
Je viens de jeter un coup d'oeil dans les logs : Toutes les heures j'ai ça :
RRD: The API returns an unknown error_code: auth_required
L'ensemble des permissions est bien correct (acceptation sur le boitier + gestion des accès dans la freebox)
Et comme indiqué plus haut toutes les 10 min j'ai ça :
json: cannot unmarshal object into Go struct field .data of type []map[string]int
Ok, la première n'est pas grave, mais bizarrement le log n'est pas correcte puisque auth_required est une erreur connue. L'app se reconnect d'elle-même. Par contre il faut que j'arrive à déterminer d'où vient le second message. On sait déjà que les deux ne sont pas couplés. Je vais investiguer plus avant.
Je viens de faire la v1.1.3, où tu peux ajouter l'option -debug. Il va donner le body de la request (donc ça va être un peu baveux), ce qui nous permettra de voir à quoi ressemble l'objet qui ne passe pas. Mais de toute évidence, ça n'a pas grand impact si ça n'arrive que toutes les 10 minutes (sachant que l'API est appelée toutes les 10 secondes). Il y a des chances que l'ancienne version se comportait de la même manière, j'ai simplement capturé plus d'erreurs dans la nouvelle version. Quoi qu'il en soit, n'hésite pas à poster le nouveau message d'erreur.
Héhéhé nous avons une réponse 👍
2019/09/03 19:08:12 freebox_exporter started on port :10001
2019/09/03 19:08:21 [123 34 115 117 99 99 101 115 115 34 58 116 114 117 101 44 34 114 101 115 117 108 116 34 58 123 34 100 97 116 101 95 115 116 97 114 116 34 58 49 53 54 55 53 51 55 54 55 48 44 34 100 97 116 97 34 58 123 125 44 34 100 97 116 101 95 101 110 100 34 58 49 53 54 55 53 51 55 54 57 56 125 125]
2019/09/03 19:08:21 An error occured with DSL metrics: json: cannot unmarshal object into Go struct field .data of type []map[string]int
2019/09/03 19:08:32 [123 34 115 117 99 99 101 115 115 34 58 116 114 117 101 44 34 114 101 115 117 108 116 34 58 123 34 100 97 116 101 95 115 116 97 114 116 34 58 49 53 54 55 53 51 55 54 57 48 44 34 100 97 116 97 34 58 123 125 44 34 100 97 116 101 95 101 110 100 34 58 49 53 54 55 53 51 55 55 48 57 125 125]
2019/09/03 19:08:32 An error occured with DSL metrics: json: cannot unmarshal object into Go struct field .data of type []map[string]int
2019/09/03 19:08:42 [123 34 115 117 99 99 101 115 115 34 58 116 114 117 101 44 34 114 101 115 117 108 116 34 58 123 34 100 97 116 101 95 115 116 97 114 116 34 58 49 53 54 55 53 51 55 55 48 48 44 34 100 97 116 97 34 58 123 125 44 34 100 97 116 101 95 101 110 100 34 58 49 53 54 55 53 51 55 55 49 56 125 125]
2019/09/03 19:08:42 An error occured with DSL metrics: json: cannot unmarshal object into Go struct field .data of type []map[string]int
Pour moi qui lis les bytes comme d'autres lisent la matrice, ça donne ça :
{"success":true,"result":{"date_start":1567537690,"data":{},"date_end":1567537709}}
Donc l'API de la freebox ne renvoie pas de data sur la métrique DSL toutes les 10 minutes. Le struct s'attend à recevoir soit un array de map [string]int, ou que le champ ne soit pas présent. A priori il ne se comporte pas comme s'il n'était pas présent lorsqu'il est vide, il faut que je trouve la parade.
Sinon j'ai corrigé l'output du debug dans v1.1.4
Effectivement la nouvelle version est plus claire pour moi qui ne lit ni byte, ni matrice 😀 Tu ne peux pas faire un test au démarrage pour voir les éléments que te renvoie le boitier ?
Le problème, c'est que cette réponse arrive une fois toutes les 60, pour les 59 autres fois il n'y a pas de problème. Dans le struct, j'ai bien :
Data []map[string]int `json:"data,omitempty"`
Pour que le omitempty fonctionne correctement, je il faudrait que l'API me retourne un array avec une map avec une string nulle et un int nul. Le problème, c'est qu'il ne renvoie pas ce format, et donc le omitempty ne fonctionne pas, d'où l'erreur. A ce stade c'est plus un problème de l'API, mais je vais quand même regarder comment le contourner.
Je viens de pousser le v1.1.6
The API returns an unknown error_code
pour auth_required
ne devrait plus apparaître lorsqu'il fait partie du processus normal de re-aithentification à la freebox-fiber
qui coupe la capture des métriques DSL sur les Freebox fibre (car la métrique n'a pas lieu d'être)
Hello,
I just update with the last release and got this in the logs file: