mirror of
https://github.com/m1k1o/neko-rooms.git
synced 2026-11-02 22:51:34 -06:00
implement stats.
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user