diff --git a/plugins/inputs/uwsgi/stat_types.go b/plugins/inputs/uwsgi/stat_types.go index 9270a64e6..3537b1219 100644 --- a/plugins/inputs/uwsgi/stat_types.go +++ b/plugins/inputs/uwsgi/stat_types.go @@ -20,13 +20,14 @@ type StatsServer struct { type Worker struct { // Tags - Id int `json:"id"` - Pid int `json:"pid"` + WorkerId int `json:"id"` + Pid int `json:"pid"` // Fields Accepting int `json:"accepting"` Requests int `json:"requests"` DeltaRequests int `json:"delta_requests"` + Exceptions int `json:"exceptions"` HarakiriCount int `json:"harakiri_count"` Signals int `json:"signals"` SignalQueue int `json:"signal_queue"` @@ -38,4 +39,34 @@ type Worker struct { RespawnCount int `json:"respawn_count"` Tx int `json:"tx"` AvgRt int `json:"avg_rt"` + + Apps []*App `json:"apps"` + Cores []*Core `json:"cores"` +} + +type App struct { + // Tags + AppId int `json:"id"` + MountPoint string `json:"mountpoint"` + Chdir string `json:"chdir"` + + // Fields + Modifier1 int `json:"modifier1"` + Requests int `json:"requests"` + StartupTime int `json:"startup_time"` + Exceptions int `json:"exceptions"` +} + +type Core struct { + // Tags + CoreId int `json:"id"` + + // Fields + Requests int `json:"requests"` + StaticRequests int `json:"static_requests"` + RoutedRequests int `json:"routed_requests"` + OffloadedRequests int `json:"offloaded_requests"` + WriteErrors int `json:"write_errors"` + ReadErrors int `json:"read_errors"` + InRequest int `json:"in_request"` } diff --git a/plugins/inputs/uwsgi/uwsgi.go b/plugins/inputs/uwsgi/uwsgi.go index 70c35d8df..d6c47cbdb 100644 --- a/plugins/inputs/uwsgi/uwsgi.go +++ b/plugins/inputs/uwsgi/uwsgi.go @@ -68,6 +68,8 @@ func (u *Uwsgi) gatherServer(acc telegraf.Accumulator, url *url.URL) error { u.gatherStatServer(acc, &s) u.gatherWorkers(acc, &s) + u.gatherApps(acc, &s) + u.gatherCores(acc, &s) return nil } @@ -100,6 +102,7 @@ func (u *Uwsgi) gatherWorkers(acc telegraf.Accumulator, s *StatsServer) error { "requests": w.Requests, "accepting": w.Accepting, "delta_request": w.DeltaRequests, + "exceptions": w.Exceptions, "harakiri_count": w.HarakiriCount, "signals": w.Signals, "signal_queue": w.SignalQueue, @@ -113,9 +116,9 @@ func (u *Uwsgi) gatherWorkers(acc telegraf.Accumulator, s *StatsServer) error { "avg_rt": w.AvgRt, } tags := map[string]string{ - "id": strconv.Itoa(w.Id), - "url": s.Url, - "pid": strconv.Itoa(w.Pid), + "worker_id": strconv.Itoa(w.WorkerId), + "url": s.Url, + "pid": strconv.Itoa(w.Pid), } acc.AddFields("uwsgi_workers", fields, tags) @@ -124,6 +127,52 @@ func (u *Uwsgi) gatherWorkers(acc telegraf.Accumulator, s *StatsServer) error { return nil } +func (u *Uwsgi) gatherApps(acc telegraf.Accumulator, s *StatsServer) error { + for _, w := range s.Workers { + for _, a := range w.Apps { + fields := map[string]interface{}{ + "modifier1": a.Modifier1, + "requests": a.Requests, + "startup_time": a.StartupTime, + "exceptions": a.Exceptions, + } + tags := map[string]string{ + "app_id": strconv.Itoa(a.AppId), + "worker_id": strconv.Itoa(w.WorkerId), + "mountpoint": a.MountPoint, + "chdir": a.Chdir, + } + acc.AddFields("uwsgi_apps", fields, tags) + } + } + + return nil +} + +func (u *Uwsgi) gatherCores(acc telegraf.Accumulator, s *StatsServer) error { + for _, w := range s.Workers { + for _, c := range w.Cores { + fields := map[string]interface{}{ + "requests": c.Requests, + "static_requests": c.StaticRequests, + "routed_requests": c.RoutedRequests, + "offloaded_requests": c.OffloadedRequests, + "write_errors": c.WriteErrors, + "read_errors": c.ReadErrors, + "in_request": c.InRequest, + } + tags := map[string]string{ + "core_id": strconv.Itoa(c.CoreId), + "worker_id": strconv.Itoa(w.WorkerId), + } + acc.AddFields("uwsgi_cores", fields, tags) + } + + } + + return nil +} + func init() { inputs.Add("uwsgi", func() telegraf.Input { return &Uwsgi{} }) }