feat: use goroutines
Signed-off-by: martin <martin.labat92@gmail.com>
This commit is contained in:
parent
3749b1eef9
commit
107112b139
5 changed files with 47 additions and 29 deletions
|
@ -45,7 +45,7 @@ func Auth() {
|
||||||
if res.StatusCode == 400 {
|
if res.StatusCode == 400 {
|
||||||
log.Fatalln("Incorrect login")
|
log.Fatalln("Incorrect login")
|
||||||
} else {
|
} else {
|
||||||
var result models.Login
|
var result models.StructLogin
|
||||||
if err := json.Unmarshal(body, &result); err != nil {
|
if err := json.Unmarshal(body, &result); err != nil {
|
||||||
log.Println("Can not unmarshal JSON")
|
log.Println("Can not unmarshal JSON")
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,28 +7,45 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
func Allrequests(r *prometheus.Registry) {
|
func Allrequests(r *prometheus.Registry) {
|
||||||
|
|
||||||
serverversion(r)
|
wg.Add(1)
|
||||||
|
go ServerVersion(r)
|
||||||
Analyze(r)
|
wg.Add(1)
|
||||||
|
go Analyze(r)
|
||||||
|
wg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Analyze(r *prometheus.Registry) {
|
func Analyze(r *prometheus.Registry) {
|
||||||
allusers, err := GetAllUsers()
|
defer wg.Done()
|
||||||
users, err2 := users()
|
allusers := make(chan func() (*models.StructAllUsers, error))
|
||||||
|
|
||||||
|
serverinfo := make(chan func() (*models.StructServerInfo, error))
|
||||||
|
wg.Add(1)
|
||||||
|
go GetAllUsers(allusers)
|
||||||
|
res1, err := (<-allusers)()
|
||||||
|
wg.Add(1)
|
||||||
|
go ServerInfo(serverinfo)
|
||||||
|
|
||||||
|
res2, err2 := (<-serverinfo)()
|
||||||
|
|
||||||
if err != nil && err2 != nil {
|
if err != nil && err2 != nil {
|
||||||
} else {
|
} else {
|
||||||
Sendbackmessagepreference(users, allusers, r)
|
Sendbackmessagepreference(res2, res1, r)
|
||||||
}
|
}
|
||||||
|
close(serverinfo)
|
||||||
|
close(allusers)
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetAllUsers() (*models.AllUsers, error) {
|
func GetAllUsers(c chan func() (*models.StructAllUsers, error)) {
|
||||||
|
defer wg.Done()
|
||||||
resp, err := Apirequest("/api/user?isAll=true", "GET")
|
resp, err := Apirequest("/api/user?isAll=true", "GET")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Error() == "403" {
|
if err.Error() == "403" {
|
||||||
|
@ -48,19 +65,20 @@ func GetAllUsers() (*models.AllUsers, error) {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
var result models.AllUsers
|
result := new(models.StructAllUsers)
|
||||||
if err := json.Unmarshal(body, &result); err != nil { // Parse []byte to go struct pointer
|
if err := json.Unmarshal(body, &result); err != nil { // Parse []byte to go struct pointer
|
||||||
log.Println("Can not unmarshal JSON")
|
log.Println("Can not unmarshal JSON")
|
||||||
}
|
}
|
||||||
|
|
||||||
return &result, nil
|
c <- (func() (*models.StructAllUsers, error) { return result, nil })
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return &models.AllUsers{}, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func serverversion(r *prometheus.Registry) {
|
func ServerVersion(r *prometheus.Registry) {
|
||||||
|
defer wg.Done()
|
||||||
resp, err := Apirequest("/api/server-info/version", "GET")
|
resp, err := Apirequest("/api/server-info/version", "GET")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Error() == "403" {
|
if err.Error() == "403" {
|
||||||
|
@ -80,7 +98,7 @@ func serverversion(r *prometheus.Registry) {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
var result models.ServerVersion
|
var result models.StructServerVersion
|
||||||
if err := json.Unmarshal(body, &result); err != nil { // Parse []byte to go struct pointer
|
if err := json.Unmarshal(body, &result); err != nil { // Parse []byte to go struct pointer
|
||||||
log.Println("Can not unmarshal JSON")
|
log.Println("Can not unmarshal JSON")
|
||||||
}
|
}
|
||||||
|
@ -92,7 +110,8 @@ func serverversion(r *prometheus.Registry) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func users() (*models.Users, error) {
|
func ServerInfo(c chan func() (*models.StructServerInfo, error)) {
|
||||||
|
defer wg.Done()
|
||||||
resp, err := Apirequest("/api/server-info/stats", "GET")
|
resp, err := Apirequest("/api/server-info/stats", "GET")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Error() == "403" {
|
if err.Error() == "403" {
|
||||||
|
@ -113,16 +132,15 @@ func users() (*models.Users, error) {
|
||||||
log.Fatalln(err)
|
log.Fatalln(err)
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
var result models.Users
|
result := new(models.StructServerInfo)
|
||||||
if err := json.Unmarshal(body, &result); err != nil { // Parse []byte to go struct pointer
|
if err := json.Unmarshal(body, &result); err != nil { // Parse []byte to go struct pointer
|
||||||
log.Println("Can not unmarshal JSON")
|
log.Println("Can not unmarshal JSON")
|
||||||
}
|
}
|
||||||
|
c <- (func() (*models.StructServerInfo, error) { return result, nil })
|
||||||
return &result, nil
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return &models.Users{}, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Apirequest(uri string, method string) (*http.Response, error) {
|
func Apirequest(uri string, method string) (*http.Response, error) {
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Sendbackmessagepreference(result *models.Users, result2 *models.AllUsers, r *prometheus.Registry) {
|
func Sendbackmessagepreference(result *models.StructServerInfo, result2 *models.StructAllUsers, r *prometheus.Registry) {
|
||||||
total_photos := prometheus.NewGauge(prometheus.GaugeOpts{
|
total_photos := prometheus.NewGauge(prometheus.GaugeOpts{
|
||||||
Name: "immich_app_total_photos",
|
Name: "immich_app_total_photos",
|
||||||
Help: "The total number of photos",
|
Help: "The total number of photos",
|
||||||
|
@ -67,7 +67,7 @@ func Sendbackmessagepreference(result *models.Users, result2 *models.AllUsers, r
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Sendbackmessageserverversion(result *models.ServerVersion, r *prometheus.Registry) {
|
func Sendbackmessageserverversion(result *models.StructServerVersion, r *prometheus.Registry) {
|
||||||
|
|
||||||
version := prometheus.NewGauge(prometheus.GaugeOpts{
|
version := prometheus.NewGauge(prometheus.GaugeOpts{
|
||||||
Name: "version",
|
Name: "version",
|
||||||
|
@ -81,7 +81,7 @@ func Sendbackmessageserverversion(result *models.ServerVersion, r *prometheus.Re
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetName(result string, result2 *models.AllUsers) models.CustomUser {
|
func GetName(result string, result2 *models.StructAllUsers) models.CustomUser {
|
||||||
var myuser models.CustomUser
|
var myuser models.CustomUser
|
||||||
for i := 0; i < len(*result2); i++ {
|
for i := 0; i < len(*result2); i++ {
|
||||||
if (*result2)[i].ID == result {
|
if (*result2)[i].ID == result {
|
||||||
|
|
|
@ -2,7 +2,7 @@ package models
|
||||||
|
|
||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
type Login struct {
|
type StructLogin struct {
|
||||||
AccessToken string `json:"accessToken"`
|
AccessToken string `json:"accessToken"`
|
||||||
UserID string `json:"userId"`
|
UserID string `json:"userId"`
|
||||||
UserEmail string `json:"userEmail"`
|
UserEmail string `json:"userEmail"`
|
||||||
|
@ -12,7 +12,7 @@ type Login struct {
|
||||||
ShouldChangePassword bool `json:"shouldChangePassword"`
|
ShouldChangePassword bool `json:"shouldChangePassword"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Users struct {
|
type StructServerInfo struct {
|
||||||
Photos int `json:"photos"`
|
Photos int `json:"photos"`
|
||||||
Videos int `json:"videos"`
|
Videos int `json:"videos"`
|
||||||
UsageByUser []struct {
|
UsageByUser []struct {
|
||||||
|
@ -26,7 +26,7 @@ type Users struct {
|
||||||
Usage string `json:"usage"`
|
Usage string `json:"usage"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ServerInfo struct {
|
type StructDiskInfo struct {
|
||||||
DiskAvailable string `json:"diskAvailable"`
|
DiskAvailable string `json:"diskAvailable"`
|
||||||
DiskSize string `json:"diskSize"`
|
DiskSize string `json:"diskSize"`
|
||||||
DiskUse string `json:"diskUse"`
|
DiskUse string `json:"diskUse"`
|
||||||
|
@ -36,13 +36,13 @@ type ServerInfo struct {
|
||||||
DiskUsagePercentage float64 `json:"diskUsagePercentage"`
|
DiskUsagePercentage float64 `json:"diskUsagePercentage"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ServerVersion struct {
|
type StructServerVersion struct {
|
||||||
Major int `json:"major"`
|
Major int `json:"major"`
|
||||||
Minor int `json:"minor"`
|
Minor int `json:"minor"`
|
||||||
Patch int `json:"patch"`
|
Patch int `json:"patch"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type AllUsers []struct {
|
type StructAllUsers []struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
FirstName string `json:"firstName"`
|
FirstName string `json:"firstName"`
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package models
|
package models
|
||||||
|
|
||||||
type User struct {
|
type StructImmichUser struct {
|
||||||
Username string
|
Username string
|
||||||
Password string
|
Password string
|
||||||
URL string
|
URL string
|
||||||
accessToken string
|
accessToken string
|
||||||
}
|
}
|
||||||
|
|
||||||
var myuser User
|
var myuser StructImmichUser
|
||||||
|
|
||||||
func mask(input string) string {
|
func mask(input string) string {
|
||||||
hide := ""
|
hide := ""
|
||||||
|
|
Loading…
Reference in a new issue