Add scraping of call log
This commit is contained in:
parent
9739f241be
commit
7f045f968c
2 changed files with 61 additions and 7 deletions
|
|
@ -146,6 +146,32 @@ type StationStatusData struct {
|
||||||
IpPrefixClass string `json:"IpPrefixClass"`
|
IpPrefixClass string `json:"IpPrefixClass"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CallLog struct {
|
||||||
|
Lines map[string]*PhoneNumberCallLog
|
||||||
|
Line0 *PhoneNumberCallLog `json:"0"`
|
||||||
|
Line1 *PhoneNumberCallLog `json:"1"`
|
||||||
|
Token string `json:"token"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PhoneNumberCallLog struct {
|
||||||
|
Error string `json:"error"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
Data *CallLogData `json:"data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CallLogData struct {
|
||||||
|
Entries []*CallLogEntry `json:"CallTbl"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type CallLogEntry struct {
|
||||||
|
Id string `json:"__id"`
|
||||||
|
EndTime string `json:"endTime"`
|
||||||
|
StartTime string `json:"startTime"`
|
||||||
|
ExternalNumber string `json:"externalNumber"`
|
||||||
|
Direction string `json:"Direction"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
}
|
||||||
|
|
||||||
func NewVodafoneStation(stationUrl, password string) *VodafoneStation {
|
func NewVodafoneStation(stationUrl, password string) *VodafoneStation {
|
||||||
cookieJar, err := cookiejar.New(nil)
|
cookieJar, err := cookiejar.New(nil)
|
||||||
parsedUrl, err := url.Parse(stationUrl)
|
parsedUrl, err := url.Parse(stationUrl)
|
||||||
|
|
@ -216,9 +242,6 @@ func (v *VodafoneStation) GetDocsisStatus() (*DocsisStatusResponse, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *VodafoneStation) GetStationStatus() (*StationStatusReponse, error) {
|
func (v *VodafoneStation) GetStationStatus() (*StationStatusReponse, error) {
|
||||||
if err := v.CheckTimeout(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
responseBody, err := v.doRequest("GET", v.URL+"/api/v1/sta_status?_="+strconv.FormatInt(makeTimestamp(), 10), "")
|
responseBody, err := v.doRequest("GET", v.URL+"/api/v1/sta_status?_="+strconv.FormatInt(makeTimestamp(), 10), "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -227,12 +250,18 @@ func (v *VodafoneStation) GetStationStatus() (*StationStatusReponse, error) {
|
||||||
return stationStatusReponse, json.Unmarshal(responseBody, stationStatusReponse)
|
return stationStatusReponse, json.Unmarshal(responseBody, stationStatusReponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *VodafoneStation) CheckTimeout() error {
|
func (v *VodafoneStation) GetCallLog() (*CallLog, error) {
|
||||||
_, err := v.doRequest("GET", v.URL+"/api/v1/CheckTimeOut?_="+strconv.FormatInt(makeTimestamp(), 10), "")
|
responseBody, err := v.doRequest("GET", v.URL+"/api/v1/phone_calllog/1,2/CallTbl?_="+strconv.FormatInt(makeTimestamp(), 10), "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
return nil
|
callLog := &CallLog{}
|
||||||
|
err = json.Unmarshal(responseBody, callLog)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
callLog.Lines = map[string]*PhoneNumberCallLog{"0": callLog.Line0, "1": callLog.Line1}
|
||||||
|
return callLog, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeTimestamp() int64 {
|
func makeTimestamp() int64 {
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,9 @@ var (
|
||||||
ipAddressRTDesc *prometheus.Desc
|
ipAddressRTDesc *prometheus.Desc
|
||||||
ipPrefixClassDesc *prometheus.Desc
|
ipPrefixClassDesc *prometheus.Desc
|
||||||
|
|
||||||
|
callEndTimeDesc *prometheus.Desc
|
||||||
|
callStartTimeDesc *prometheus.Desc
|
||||||
|
|
||||||
logoutSuccessDesc *prometheus.Desc
|
logoutSuccessDesc *prometheus.Desc
|
||||||
logoutMessageDesc *prometheus.Desc
|
logoutMessageDesc *prometheus.Desc
|
||||||
)
|
)
|
||||||
|
|
@ -121,6 +124,9 @@ func init() {
|
||||||
ipAddressRTDesc = prometheus.NewDesc(prefix+"ip_address_rt_info", "IP address RT", []string{"ip"}, nil)
|
ipAddressRTDesc = prometheus.NewDesc(prefix+"ip_address_rt_info", "IP address RT", []string{"ip"}, nil)
|
||||||
ipPrefixClassDesc = prometheus.NewDesc(prefix+"ip_prefix_class_info", "IP prefix class info", []string{"prefix_class"}, nil)
|
ipPrefixClassDesc = prometheus.NewDesc(prefix+"ip_prefix_class_info", "IP prefix class info", []string{"prefix_class"}, nil)
|
||||||
|
|
||||||
|
callEndTimeDesc = prometheus.NewDesc(prefix+"call_end_time_epoch", "Call endtime as unix epoch", []string{"port", "id", "external_number", "direction", "type"}, nil)
|
||||||
|
callStartTimeDesc = prometheus.NewDesc(prefix+"call_start_time_epoch", "Call starttime as unix epoch", []string{"port", "id", "external_number", "direction", "type"}, nil)
|
||||||
|
|
||||||
logoutSuccessDesc = prometheus.NewDesc(prefix+"logout_success_bool", "1 if the logout was successfull", nil, nil)
|
logoutSuccessDesc = prometheus.NewDesc(prefix+"logout_success_bool", "1 if the logout was successfull", nil, nil)
|
||||||
logoutMessageDesc = prometheus.NewDesc(prefix+"logout_message_info", "Logout message returned by the web interface", []string{"message"}, nil)
|
logoutMessageDesc = prometheus.NewDesc(prefix+"logout_message_info", "Logout message returned by the web interface", []string{"message"}, nil)
|
||||||
}
|
}
|
||||||
|
|
@ -176,6 +182,9 @@ func (c *Collector) Describe(ch chan<- *prometheus.Desc) {
|
||||||
ch <- ipAddressRTDesc
|
ch <- ipAddressRTDesc
|
||||||
ch <- ipPrefixClassDesc
|
ch <- ipPrefixClassDesc
|
||||||
|
|
||||||
|
ch <- callEndTimeDesc
|
||||||
|
ch <- callStartTimeDesc
|
||||||
|
|
||||||
ch <- logoutSuccessDesc
|
ch <- logoutSuccessDesc
|
||||||
ch <- logoutMessageDesc
|
ch <- logoutMessageDesc
|
||||||
}
|
}
|
||||||
|
|
@ -272,6 +281,22 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
|
||||||
ch <- prometheus.MustNewConstMetric(ipPrefixClassDesc, prometheus.GaugeValue, 1, stationStatusResponse.Data.IpPrefixClass)
|
ch <- prometheus.MustNewConstMetric(ipPrefixClassDesc, prometheus.GaugeValue, 1, stationStatusResponse.Data.IpPrefixClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callLog, err := c.Station.GetCallLog()
|
||||||
|
if err != nil {
|
||||||
|
log.With("error", err.Error()).Error("Failed to get call log")
|
||||||
|
} else {
|
||||||
|
for port, phoneNumberCallLog := range callLog.Lines {
|
||||||
|
if phoneNumberCallLog.Data == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
for _, callLogEntry := range phoneNumberCallLog.Data.Entries { //port", "id", "external_number", "direction", "type
|
||||||
|
labels := []string{port, callLogEntry.Id, callLogEntry.ExternalNumber, callLogEntry.Direction, callLogEntry.Type}
|
||||||
|
ch <- prometheus.MustNewConstMetric(callEndTimeDesc, prometheus.GaugeValue, parse2float(callLogEntry.EndTime), labels...)
|
||||||
|
ch <- prometheus.MustNewConstMetric(callStartTimeDesc, prometheus.GaugeValue, parse2float(callLogEntry.StartTime), labels...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
logoutresponse, err := c.Station.Logout()
|
logoutresponse, err := c.Station.Logout()
|
||||||
if logoutresponse != nil {
|
if logoutresponse != nil {
|
||||||
ch <- prometheus.MustNewConstMetric(logoutMessageDesc, prometheus.GaugeValue, 1, logoutresponse.Message)
|
ch <- prometheus.MustNewConstMetric(logoutMessageDesc, prometheus.GaugeValue, 1, logoutresponse.Message)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue