Adding instance statistics API call

This commit is contained in:
Farhan Khan 2023-07-13 16:29:18 +00:00
parent 14edc5faf2
commit 0b38f818d3
Signed by untrusted user who does not match committer: farhan
GPG Key ID: 45FE45AD7E54F59B

View File

@ -12,6 +12,12 @@ import (
"github.com/jackc/pgx/v4"
)
type InstanceStatsJson struct {
Timestamp time.Time `json:"timestamp"`
ActivitiesCount int `json:"activitiescount"`
ActorsCount int `json:"actorscount"`
}
var metricsText string
func enableCors(w *http.ResponseWriter) {
@ -48,7 +54,7 @@ GROUP BY hashtags ORDER BY count DESC LIMIT 20;`
panic(err)
}
hashtagitems := make([]interface{}, 0);
hashtagitems := make([]interface{}, 0)
hashcount := 0
for rows.Next() {
var hashtag string
@ -67,7 +73,7 @@ GROUP BY hashtags ORDER BY count DESC LIMIT 20;`
}
rows.Close()
hashtagtotal := make(map[string]interface{});
hashtagtotal := make(map[string]interface{})
hashtagtotal["count"] = hashcount
hashtagtotal["items"] = hashtagitems
@ -102,7 +108,7 @@ ORDER BY 2 DESC LIMIT 20;`
panic(err)
}
trendingitems := make([]interface{}, 0);
trendingitems := make([]interface{}, 0)
trendingcount := 0
for rows.Next() {
var trendingword string
@ -121,7 +127,7 @@ ORDER BY 2 DESC LIMIT 20;`
}
rows.Close()
trendingwordtotal := make(map[string]interface{});
trendingwordtotal := make(map[string]interface{})
trendingwordtotal["count"] = trendingcount
trendingwordtotal["items"] = trendingitems
@ -213,6 +219,46 @@ func getSearch(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%s", data)
}
func getInstanceStats(w http.ResponseWriter, r *http.Request) {
enableCors(&w)
instanceKeys, exists := r.URL.Query()["i"]
// var err error
// var rows pgx.Rows
var instance string
if exists {
instance = instanceKeys[0]
}
instancestatsjson := &InstanceStatsJson{}
instancestatsjson.Timestamp = time.Now()
if exists && instance != "" {
var activitiescount int
selectActivities := pool.QueryRow(context.Background(), "SELECT count(*) FROM activities WHERE instance = $1", instance)
err := selectActivities.Scan(&activitiescount)
if err != nil {
fmt.Println("Error ", err)
return
}
instancestatsjson.ActivitiesCount = activitiescount
var actorscount int
selectActors := pool.QueryRow(context.Background(), "SELECT count(*) FROM actors WHERE instance = $1", instance)
err = selectActors.Scan(&actorscount)
if err != nil {
fmt.Println("Error ", err)
return
}
instancestatsjson.ActorsCount = actorscount
}
bytearray, _ := json.Marshal(instancestatsjson)
stringarray := string(bytearray)
fmt.Fprintf(w, "%s", stringarray)
}
func main() {
pool = getDbPool()
@ -227,6 +273,7 @@ func main() {
http.HandleFunc("/api/v1/search", getSearch)
http.HandleFunc("/api/v1/trending", getTrending)
http.HandleFunc("/api/v1/instance/stats", getInstanceStats)
log.Print("Starting HTTP inbox on port http://0.0.0.0:6431")
log.Fatal(http.ListenAndServe("0.0.0.0:6431", nil))
}