1
0
mirror of https://github.com/badkaktus/gorocket.git synced 2024-12-04 10:34:44 +02:00
gorocket/info.go
2024-02-03 21:54:40 +02:00

387 lines
14 KiB
Go

package gorocket
import (
"fmt"
"net/http"
"time"
)
type RespInfo struct {
Version string `json:"version"`
Info struct {
Version string `json:"version"`
Build Build `json:"build"`
Commit Commit `json:"commit"`
MarketplaceAPIVersion string `json:"marketplaceApiVersion"`
} `json:"info"`
Success bool `json:"success"`
}
type Build struct {
Date time.Time `json:"date"`
NodeVersion string `json:"nodeVersion"`
Arch string `json:"arch"`
Platform string `json:"platform"`
OsRelease string `json:"osRelease"`
TotalMemory int64 `json:"totalMemory"`
FreeMemory int `json:"freeMemory"`
Cpus int `json:"cpus"`
}
type Commit struct {
Hash string `json:"hash"`
Date string `json:"date"`
Author string `json:"author"`
Subject string `json:"subject"`
Tag string `json:"tag"`
Branch string `json:"branch"`
}
type RespDirectory struct {
Result []DirectoryResult `json:"result"`
Count int `json:"count"`
Offset int `json:"offset"`
Total int `json:"total"`
Success bool `json:"success"`
}
type DirectoryResult struct {
ID string `json:"_id"`
CreatedAt time.Time `json:"createdAt"`
Emails []Email `json:"emails"`
Name string `json:"name"`
Username string `json:"username"`
AvatarETag string `json:"avatarETag"`
}
type Result struct {
ID string `json:"_id"`
Ts time.Time `json:"ts"`
T string `json:"t"`
Name string `json:"name"`
UsersCount int `json:"usersCount"`
Default bool `json:"default"`
LastMessage LastMessage `json:"lastMessage"`
}
type LastMessage struct {
ID string `json:"_id"`
Alias string `json:"alias"`
Msg string `json:"msg"`
Attachments []interface{} `json:"attachments"`
ParseUrls bool `json:"parseUrls"`
Groupable bool `json:"groupable"`
Ts time.Time `json:"ts"`
U U `json:"u"`
Rid string `json:"rid"`
UpdatedAt time.Time `json:"_updatedAt"`
Mentions []interface{} `json:"mentions"`
Channels []interface{} `json:"channels"`
}
type U struct {
ID string `json:"_id"`
Username string `json:"username"`
Name string `json:"name,omitempty"`
}
type RespSpotlight struct {
Users []UsersInfo `json:"users"`
Rooms []RoomsInfo `json:"rooms"`
Success bool `json:"success"`
Error string `json:"error,omitempty"`
}
type UsersInfo struct {
ID string `json:"_id"`
Status string `json:"status"`
Name string `json:"name"`
Username string `json:"username"`
StatusText string `json:"statusText"`
AvatarETag string `json:"avatarETag,omitempty"`
}
type RoomsInfo struct {
ID string `json:"_id"`
Name string `json:"name"`
T string `json:"t"`
LastMessage LastMessage `json:"lastMessage"`
}
type RespStatistics struct {
ID string `json:"_id"`
Wizard Wizard `json:"wizard"`
UniqueID string `json:"uniqueId"`
InstalledAt time.Time `json:"installedAt"`
Version string `json:"version"`
TotalUsers int `json:"totalUsers"`
ActiveUsers int `json:"activeUsers"`
ActiveGuests int `json:"activeGuests"`
NonActiveUsers int `json:"nonActiveUsers"`
AppUsers int `json:"appUsers"`
OnlineUsers int `json:"onlineUsers"`
AwayUsers int `json:"awayUsers"`
TotalConnectedUsers int `json:"totalConnectedUsers"`
OfflineUsers int `json:"offlineUsers"`
TotalRooms int `json:"totalRooms"`
TotalChannels int `json:"totalChannels"`
TotalPrivateGroups int `json:"totalPrivateGroups"`
TotalDirect int `json:"totalDirect"`
TotalLivechat int `json:"totalLivechat"`
TotalDiscussions int `json:"totalDiscussions"`
TotalThreads int `json:"totalThreads"`
TotalLivechatVisitors int `json:"totalLivechatVisitors"`
TotalLivechatAgents int `json:"totalLivechatAgents"`
LivechatEnabled bool `json:"livechatEnabled"`
TotalChannelMessages int `json:"totalChannelMessages"`
TotalPrivateGroupMessages int `json:"totalPrivateGroupMessages"`
TotalDirectMessages int `json:"totalDirectMessages"`
TotalLivechatMessages int `json:"totalLivechatMessages"`
TotalMessages int `json:"totalMessages"`
FederatedServers int `json:"federatedServers"`
FederatedUsers int `json:"federatedUsers"`
LastLogin time.Time `json:"lastLogin"`
LastMessageSentAt time.Time `json:"lastMessageSentAt"`
LastSeenSubscription time.Time `json:"lastSeenSubscription"`
Os Os `json:"os"`
Process Process `json:"process"`
Deploy Deploy `json:"deploy"`
EnterpriseReady bool `json:"enterpriseReady"`
UploadsTotal int `json:"uploadsTotal"`
UploadsTotalSize int `json:"uploadsTotalSize"`
Migration Migration `json:"migration"`
InstanceCount int `json:"instanceCount"`
OplogEnabled bool `json:"oplogEnabled"`
MongoVersion string `json:"mongoVersion"`
MongoStorageEngine string `json:"mongoStorageEngine"`
UniqueUsersOfYesterday Stats `json:"uniqueUsersOfYesterday"`
UniqueUsersOfLastMonth Stats `json:"uniqueUsersOfLastMonth"`
UniqueDevicesOfYesterday Stats `json:"uniqueDevicesOfYesterday"`
UniqueDevicesOfLastMonth Stats `json:"uniqueDevicesOfLastMonth"`
UniqueOSOfYesterday Stats `json:"uniqueOSOfYesterday"`
UniqueOSOfLastMonth Stats `json:"uniqueOSOfLastMonth"`
Apps Apps `json:"apps"`
Integrations Integrations `json:"integrations"`
PushQueue int `json:"pushQueue"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"_updatedAt"`
Success bool `json:"success"`
}
type Wizard struct {
OrganizationType string `json:"organizationType"`
Industry string `json:"industry"`
Size string `json:"size"`
Country string `json:"country"`
Language string `json:"language"`
ServerType string `json:"serverType"`
RegisterServer bool `json:"registerServer"`
}
type Os struct {
Type string `json:"type"`
Platform string `json:"platform"`
Arch string `json:"arch"`
Release string `json:"release"`
Uptime int `json:"uptime"`
Loadavg []float64 `json:"loadavg"`
Totalmem int64 `json:"totalmem"`
Freemem int `json:"freemem"`
Cpus []Cpus `json:"cpus"`
}
type Cpus struct {
Model string `json:"model"`
Speed int `json:"speed"`
Times Times `json:"times"`
}
type Times struct {
User int `json:"user"`
Nice int `json:"nice"`
Sys int `json:"sys"`
Idle int `json:"idle"`
Irq int `json:"irq"`
}
type Process struct {
NodeVersion string `json:"nodeVersion"`
Pid int `json:"pid"`
Uptime float64 `json:"uptime"`
}
type Apps struct {
EngineVersion string `json:"engineVersion"`
Enabled bool `json:"enabled"`
TotalInstalled int `json:"totalInstalled"`
TotalActive int `json:"totalActive"`
}
type Integrations struct {
TotalIntegrations int `json:"totalIntegrations"`
TotalIncoming int `json:"totalIncoming"`
TotalIncomingActive int `json:"totalIncomingActive"`
TotalOutgoing int `json:"totalOutgoing"`
TotalOutgoingActive int `json:"totalOutgoingActive"`
TotalWithScriptEnabled int `json:"totalWithScriptEnabled"`
}
type Stats struct {
Year int `json:"year"`
Month int `json:"month"`
Day int `json:"day"`
Data []interface{} `json:"data"`
}
type Migration struct {
ID string `json:"_id"`
Locked bool `json:"locked"`
Version int `json:"version"`
}
type Deploy struct {
Method string `json:"method"`
Platform string `json:"platform"`
}
type RespStatisticsList struct {
Statistics []struct {
ID string `json:"_id"`
Wizard Wizard `json:"wizard"`
UniqueID string `json:"uniqueId"`
InstalledAt time.Time `json:"installedAt"`
Version string `json:"version"`
TotalUsers int `json:"totalUsers"`
ActiveUsers int `json:"activeUsers"`
ActiveGuests int `json:"activeGuests"`
NonActiveUsers int `json:"nonActiveUsers"`
AppUsers int `json:"appUsers"`
OnlineUsers int `json:"onlineUsers"`
AwayUsers int `json:"awayUsers"`
TotalConnectedUsers int `json:"totalConnectedUsers"`
OfflineUsers int `json:"offlineUsers"`
TotalRooms int `json:"totalRooms"`
TotalChannels int `json:"totalChannels"`
TotalPrivateGroups int `json:"totalPrivateGroups"`
TotalDirect int `json:"totalDirect"`
TotalLivechat int `json:"totalLivechat"`
TotalDiscussions int `json:"totalDiscussions"`
TotalThreads int `json:"totalThreads"`
TotalLivechatVisitors int `json:"totalLivechatVisitors"`
TotalLivechatAgents int `json:"totalLivechatAgents"`
TotalChannelMessages int `json:"totalChannelMessages"`
TotalPrivateGroupMessages int `json:"totalPrivateGroupMessages"`
TotalDirectMessages int `json:"totalDirectMessages"`
TotalLivechatMessages int `json:"totalLivechatMessages"`
TotalMessages int `json:"totalMessages"`
FederatedServers int `json:"federatedServers"`
FederatedUsers int `json:"federatedUsers"`
Os Os `json:"os"`
Process Process `json:"process"`
Deploy Deploy `json:"deploy"`
EnterpriseReady bool `json:"enterpriseReady"`
UploadsTotal int `json:"uploadsTotal"`
UploadsTotalSize int `json:"uploadsTotalSize"`
Migration Migration `json:"migration"`
InstanceCount int `json:"instanceCount"`
OplogEnabled bool `json:"oplogEnabled"`
MongoVersion string `json:"mongoVersion"`
MongoStorageEngine string `json:"mongoStorageEngine"`
UniqueUsersOfYesterday Stats `json:"uniqueUsersOfYesterday"`
UniqueUsersOfLastMonth Stats `json:"uniqueUsersOfLastMonth"`
UniqueDevicesOfYesterday Stats `json:"uniqueDevicesOfYesterday"`
UniqueDevicesOfLastMonth Stats `json:"uniqueDevicesOfLastMonth"`
UniqueOSOfYesterday Stats `json:"uniqueOSOfYesterday"`
UniqueOSOfLastMonth Stats `json:"uniqueOSOfLastMonth"`
Apps Apps `json:"apps"`
Integrations Integrations `json:"integrations"`
PushQueue int `json:"pushQueue"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"_updatedAt"`
LivechatEnabled bool `json:"livechatEnabled,omitempty"`
LastLogin time.Time `json:"lastLogin,omitempty"`
LastMessageSentAt time.Time `json:"lastMessageSentAt,omitempty"`
LastSeenSubscription time.Time `json:"lastSeenSubscription,omitempty"`
} `json:"statistics"`
Count int `json:"count"`
Offset int `json:"offset"`
Total int `json:"total"`
Success bool `json:"success"`
}
// Info returns information about the server
func (c *Client) Info() (*RespInfo, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("%s/api/info", c.baseURL), nil)
if err != nil {
return nil, err
}
res := RespInfo{}
if err := c.sendRequest(req, &res); err != nil {
return nil, err
}
return &res, nil
}
// Directory returns a list of channels
func (c *Client) Directory() (*RespDirectory, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("%s/%s/directory", c.baseURL, c.apiVersion), nil)
if err != nil {
return nil, err
}
res := RespDirectory{}
if err := c.sendRequest(req, &res); err != nil {
return nil, err
}
return &res, nil
}
// Spotlight returns a list of users and rooms that match the provided query
func (c *Client) Spotlight(query string) (*RespSpotlight, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("%s/%s/spotlight?query=%s", c.baseURL, c.apiVersion, query), nil)
if err != nil {
return nil, err
}
res := RespSpotlight{}
if err := c.sendRequest(req, &res); err != nil {
return nil, err
}
return &res, nil
}
// Statistics returns statistics about the server
func (c *Client) Statistics() (*RespStatistics, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("%s/%s/statistics", c.baseURL, c.apiVersion), nil)
if err != nil {
return nil, err
}
res := RespStatistics{}
if err := c.sendRequest(req, &res); err != nil {
return nil, err
}
return &res, nil
}
// StatisticsList returns a list of statistics
func (c *Client) StatisticsList() (*RespStatisticsList, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("%s/%s/statistics.list", c.baseURL, c.apiVersion), nil)
if err != nil {
return nil, err
}
res := RespStatisticsList{}
if err := c.sendRequest(req, &res); err != nil {
return nil, err
}
return &res, nil
}