implement stats.

This commit is contained in:
m1k1o
2021-03-21 14:54:50 +01:00
parent e63b4a9b82
commit 73c2bf7173
3 changed files with 74 additions and 1 deletions
+27
View File
@@ -1,6 +1,7 @@
package room
import (
"io"
"context"
"fmt"
"time"
@@ -108,3 +109,29 @@ func (manager *RoomManagerCtx) inspectContainer(id string) (*dockerTypes.Contain
return &container, nil
}
func (manager *RoomManagerCtx) containerExec(id string, cmd []string) (string, error) {
exec, err := manager.client.ContainerExecCreate(context.Background(), id, dockerTypes.ExecConfig{
AttachStderr: true,
AttachStdin: true,
AttachStdout: true,
Cmd: cmd,
Tty: true,
Detach: false,
})
if err != nil {
return "", err
}
conn, err := manager.client.ContainerExecAttach(context.Background(), exec.ID, dockerTypes.ExecStartCheck{
Detach: false,
Tty: true,
})
if err != nil {
return "", err
}
defer conn.Close()
data, err := io.ReadAll(conn.Reader)
return string(data), err
}
+25 -1
View File
@@ -2,6 +2,7 @@ package room
import (
"context"
"encoding/json"
"fmt"
"strings"
@@ -264,7 +265,30 @@ func (manager *RoomManagerCtx) GetSettings(id string) (*types.RoomSettings, erro
func (manager *RoomManagerCtx) GetStats(id string) (*types.RoomStats, error) {
return nil, fmt.Errorf("Not Implemented.")
container, err := manager.inspectContainer(id)
if err != nil {
return nil, err
}
settings := types.RoomSettings{}
err = settings.FromEnv(container.Config.Env)
if err != nil {
return nil, err
}
output, err := manager.containerExec(id, []string{
"wget", "-q", "-O-", "http://127.0.0.1:8080/stats?pwd="+settings.AdminPass,
})
if err != nil {
return nil, err
}
var stats types.RoomStats
if err := json.Unmarshal([]byte(output), &stats); err != nil {
return nil, err
}
return &stats, nil
}
+22
View File
@@ -0,0 +1,22 @@
package utils
import (
"bytes"
"io/ioutil"
"net/http"
)
func HttpRequestGET(url string) (string, error) {
rsp, err := http.Get(url)
if err != nil {
return "", err
}
defer rsp.Body.Close()
buf, err := ioutil.ReadAll(rsp.Body)
if err != nil {
return "", err
}
return string(bytes.TrimSpace(buf)), nil
}