Adding actor statistics API call

This commit is contained in:
Farhan Khan 2023-07-13 17:18:29 +00:00
parent 731c2b7ac9
commit 5041512453
Signed by untrusted user who does not match committer: farhan
GPG Key ID: 45FE45AD7E54F59B

View File

@ -14,10 +14,17 @@ import (
type InstanceStatsJson struct { type InstanceStatsJson struct {
Timestamp time.Time `json:"timestamp"` Timestamp time.Time `json:"timestamp"`
Instance string `json:"timestamp"`
ActivitiesCount int `json:"activitiescount"` ActivitiesCount int `json:"activitiescount"`
ActorsCount int `json:"actorscount"` ActorsCount int `json:"actorscount"`
} }
type ActorStatsJson struct {
Timestamp time.Time `json:"timestamp"`
Actor string `json:"actor"`
ActivitiesCount int `json:"activitiescount"`
}
var metricsText string var metricsText string
func enableCors(w *http.ResponseWriter) { func enableCors(w *http.ResponseWriter) {
@ -223,8 +230,6 @@ func getInstanceStats(w http.ResponseWriter, r *http.Request) {
enableCors(&w) enableCors(&w)
instanceKeys, exists := r.URL.Query()["i"] instanceKeys, exists := r.URL.Query()["i"]
// var err error
// var rows pgx.Rows
var instance string var instance string
if exists { if exists {
instance = instanceKeys[0] instance = instanceKeys[0]
@ -232,6 +237,7 @@ func getInstanceStats(w http.ResponseWriter, r *http.Request) {
instancestatsjson := &InstanceStatsJson{} instancestatsjson := &InstanceStatsJson{}
instancestatsjson.Timestamp = time.Now() instancestatsjson.Timestamp = time.Now()
instancestatsjson.Instance = instance
if exists && instance != "" { if exists && instance != "" {
var activitiescount int var activitiescount int
@ -259,6 +265,36 @@ func getInstanceStats(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%s", stringarray) fmt.Fprintf(w, "%s", stringarray)
} }
func getActorStats(w http.ResponseWriter, r *http.Request) {
enableCors(&w)
actorKeys, exists := r.URL.Query()["a"]
var actor string
if exists {
actor = actorKeys[0]
}
actorstatsjson := &ActorStatsJson{}
actorstatsjson.Timestamp = time.Now()
actorstatsjson.Actor = actor
if exists && actor != "" {
var actorscount int
selectActivities := pool.QueryRow(context.Background(), "SELECT count(*) FROM activities WHERE document->>'attributedTo' = $1", actor)
err := selectActivities.Scan(&actorscount)
if err != nil {
fmt.Println("Error ", err)
return
}
actorstatsjson.ActivitiesCount = actorscount
}
bytearray, _ := json.Marshal(actorstatsjson)
stringarray := string(bytearray)
fmt.Fprintf(w, "%s", stringarray)
}
func main() { func main() {
pool = getDbPool() pool = getDbPool()
@ -274,6 +310,7 @@ func main() {
http.HandleFunc("/api/v1/search", getSearch) http.HandleFunc("/api/v1/search", getSearch)
http.HandleFunc("/api/v1/trending", getTrending) http.HandleFunc("/api/v1/trending", getTrending)
http.HandleFunc("/api/v1/instance/stats", getInstanceStats) http.HandleFunc("/api/v1/instance/stats", getInstanceStats)
http.HandleFunc("/api/v1/actor/stats", getActorStats)
log.Print("Starting HTTP inbox on port http://0.0.0.0:6431") log.Print("Starting HTTP inbox on port http://0.0.0.0:6431")
log.Fatal(http.ListenAndServe("0.0.0.0:6431", nil)) log.Fatal(http.ListenAndServe("0.0.0.0:6431", nil))
} }