Προς το περιεχόμενο

Στατιστικα adsl γραμμης μεσω ssh


Neural_handshake

Προτεινόμενες αναρτήσεις

2 ώρες πριν, dictummortuum είπε

Καλησπέρα @DioNiSis_000,

Έχω το ίδιο modem και ήθελα να σετάρω τον prometheus μου με τα στατιστικά, τώρα που ενεργοποιήθηκε η υπηρεσία.

Είχα το ίδιο πρόβλημα με το ssh και κατέληξα να κάνω ένα script που χρησιμοποιεί telnet για να τραβάει τα δεδομένα.

Μπορείς να βρεις τον prometheus exporter για τα modem(s) μου εδώ -> https://github.com/DictumMortuum/modem-exporter

Εδώ ειναι το profile για το modem σου -> https://github.com/DictumMortuum/modem-exporter/blob/master/internal/modem/DG8245V-10.go

Παραθέτω και ένα standalone script στην περίπτωση που δεν χρησιμοποιείς grafana/prometheus, αλλά θέλει πολύ parsing για να πάρεις το output. Παράδειγμα εκτέλεσης:

~/Code/DictumMortuum/modem-exporter master*
 go run main.go
display xdsl connection status
Status: Up
Last Retrain Reason:0
Max:    Upstream rate = 52098 Kbps, Downstream rate = 114568 Kbps
Path:   0, Upstream rate = 11000 Kbps, Downstream rate = 108613 Kbps
ReceiveBlocks:          0
TransmitBlocks:         0
CellDelin:              0
LinkRetrain:            1
InitErrors:             0
InitTimeouts:           0
LossOfFraming:          1
ErroredSecs:            2
SeverelyErroredSecs:    2
FECErrors:              55
ATUCFECErrors:          0
HECErrors:              0
ATUCHECErrors:          0
CRCErrors:              0
ATUCCRCErrors:          0
On Line: 0 Days 6 Hour 38 Min 50 Sec

success!
WAP>

Και ο κώδικας:

package main

import (
        "fmt"
        "github.com/ziutek/telnet"
        "time"
)

const timeout = 10 * time.Second

func expect(t *telnet.Conn, d ...string) error {
        err := t.SetReadDeadline(time.Now().Add(timeout))
        if err != nil {
                return err
        }

        err = t.SkipUntil(d...)
        if err != nil {
                return err
        }

        return nil
}

func sendln(t *telnet.Conn, s string) error {
        err := t.SetWriteDeadline(time.Now().Add(timeout))
        if err != nil {
                return err
        }

        buf := make([]byte, len(s)+1)
        copy(buf, s)
        buf[len(s)] = '\n'

        _, err = t.Write(buf)
        if err != nil {
                return err
        }

        return nil
}

func bla(host, user, password string) error {
        t, err := telnet.Dial("tcp", host)
        if err != nil {
                return err
        }

        t.SetUnixWriteMode(true)
        var data []byte

        err = expect(t, "Login:")
        if err != nil {
                return err
        }

        err = sendln(t, user)
        if err != nil {
                return err
        }

        err = expect(t, "Password:")
        if err != nil {
                return err
        }

        err = sendln(t, password)
        if err != nil {
                return err
        }

        err = expect(t, "WAP>")
        if err != nil {
                return err
        }

        err = sendln(t, "display xdsl connection status")
        if err != nil {
                return err
        }

        data, err = t.ReadBytes('>')
        if err != nil {
                return err
        }

        fmt.Println(string(data))
        return nil
}

func main() {
        bla("192.168.5.254:23", "Forthnet", "F0rth@c$n3t#")
}

 

σε ευχαριστώ, το standalone script δουλεύει όπως ήθελα για το home assistant . το output μπορείς να το παίρνεις είτε με την παράμετρο value_template στο yaml configuration είτε πιο απλά εκτελώντας το script με την εντολή grep

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 30
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...