Maison >développement back-end >Golang >Comment obtenir le nombre d'appels actifs à partir des événements de l'interface Asterisk Manager
Lorsque vous utilisez les systèmes de communication Asterisk, connaître le nombre d'appels actifs est très important pour surveiller et gérer le trafic d'appels. Diverses informations sur les événements, y compris le nombre d'appels, peuvent être obtenues via l'interface Asterisk Manager. Cet article vous présentera les méthodes et étapes d'utilisation de l'interface Asterisk Manager pour obtenir le nombre d'appels actifs. Que vous soyez nouveau sur Asterisk ou un utilisateur expérimenté, cet article vous fournira des conseils détaillés. Nous allons jeter un coup d'oeil!
Je me suis connecté à astérisque et j'ai réussi à obtenir le nombre de pairs actifs et inactifs à partir du statut des pairs de l'événement, mais je dois maintenant obtenir le nombre d'appels et de canaux actifs et les afficher. J'ai essayé de chercher channelstatedesc=up mais ça ne marche pas. Même si je mets le log, je ne vois pas l'événement trouvé. Comment puis-je résoudre ce problème (peut-être via l'événement coreshowchannelscomplete ?) Merci d'avance
//server.go package server import ( "bufio" "fmt" "net" "strings" "data" ) func connecttoami(address, username, password string) error { conn, err := net.dial("tcp", address) if err != nil { return err } defer conn.close() fmt.fprintf(conn, "action: login\r\nusername: %s\r\nsecret: %s\r\n\r\n", username, password) peerstatus := &data.peerstatus{} callstatus := &data.callstatus{} scanner := bufio.newscanner(conn) for scanner.scan() { line := scanner.text() fmt.println(line) if strings.hasprefix(line, "peerstatus") { data.getpeerstatus(line, peerstatus) fmt.println("active peers:", peerstatus.active) fmt.println("inactive peers:", peerstatus.inactive) } else if strings.hasprefix(line, "coreshowchannel") { data.getchannelstatus(line, callstatus) fmt.println("active peers:", peerstatus.active) fmt.println("inactive peers:", peerstatus.inactive) } } if err := scanner.err(); err != nil { return err } return nil }
//calls.go package data import ( "encoding/json" "fmt" "strings" ) type CallStatus struct { ActiveCalls int `json:"active_calls"` ActiveChannels int `json:"active_channels"` } func (cs *CallStatus) UpdateCallStatus(state string) { fmt.Println("UpdateCallStatus function", state) switch state { case "Up": cs.ActiveCalls++ cs.ActiveChannels = cs.ActiveCalls * 2 case "Down": cs.ActiveCalls-- cs.ActiveChannels=cs.ActiveChannels-2 default: } } func GetChannelStatus(event string, callStatus *CallStatus) { fmt.Println("GetChannelStatus function", event) for _, line := range strings.Split(event, "\r\n") { if strings.HasPrefix(line, "ChannelStateDesc: ") { state := strings.TrimSpace(strings.TrimPrefix(line, "ChannelStateDesc: ")) callStatus.UpdateCallStatus(state) } } }
J'ai compris, le code est le suivant : //serveur.go
parts := strings.split(line, ": ") if len(parts) == 2 { key := parts[0] value := parts[1] if key == "event" { object.event = value } if key == "channelstate" { object.channelstate = value } if key == "linkedid" { object.linkedid = value } } data.handleevent(object, activecalls)
appels.go
package data import ( "encoding/json" "fmt" ) type Data struct { Event string `json:"Event"` ChannelState string `json:"ChannelState"` Linkedid string `json:"Linkedid"` } type ActiveCalls struct { Count int `json:"active_calls"` } func HandleEvent(data Data, activeCalls *ActiveCalls) { if data.Event == "Newstate" { fmt.Println(data.ChannelState) if data.ChannelState == "6" { activeCalls.Count++ fmt.Println("Newstate count active calls", activeCalls.Count) } } else if data.Event == "Hangup" { fmt.Println(data.ChannelState) activeCalls.Count-- if activeCalls.Count < 0 { activeCalls.Count = 0 } fmt.Println("Newstate count active calls after hangup", activeCalls.Count) } } func ActiveCallsToJSON(activeCalls *ActiveCalls) (string, error) { jsonBytes, err := json.Marshal(activeCalls) if err != nil { return "", err } return string(jsonBytes), nil
}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!