master
go 92 lines 1.74 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 //go:build linux || freebsd || openbsd || netbsd || dragonfly
4
5 package litespeed
6
7 import (
8 "context"
9 _ "embed"
10 "errors"
11
12 "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
13 )
14
15 //go:embed "config_schema.json"
16 var configSchema string
17
18 func init() {
19 collectorapi.Register("litespeed", collectorapi.Creator{
20 JobConfigSchema: configSchema,
21 Defaults: collectorapi.Defaults{
22 UpdateEvery: 10, // The .rtreport files are generated per worker, and updated every 10 seconds.
23 },
24 Create: func() collectorapi.CollectorV1 { return New() },
25 Config: func() any { return &Config{} },
26 })
27 }
28
29 func New() *Collector {
30 return &Collector{
31 Config: Config{
32 //ReportsDir: "/tmp/lshttpd/",
33 ReportsDir: "/opt/litespeed",
34 },
35 checkDir: true,
36 charts: charts.Copy(),
37 }
38 }
39
40 type Config struct {
41 UpdateEvery int `yaml:"update_every,omitempty" json:"update_every"`
42 ReportsDir string `yaml:"reports_dir" json:"reports_dir"`
43 }
44
45 type Collector struct {
46 collectorapi.Base
47 Config `yaml:",inline" json:""`
48
49 checkDir bool
50
51 charts *collectorapi.Charts
52 }
53
54 func (c *Collector) Configuration() any {
55 return c.Config
56 }
57
58 func (c *Collector) Init(context.Context) error {
59 if c.ReportsDir == "" {
60 return errors.New("reports_dir is required")
61 }
62 return nil
63 }
64
65 func (c *Collector) Check(context.Context) error {
66 mx, err := c.collect()
67 if err != nil {
68 return err
69 }
70
71 if len(mx) == 0 {
72 return errors.New("no metrics collected")
73 }
74
75 return nil
76 }
77
78 func (c *Collector) Charts() *collectorapi.Charts {
79 return c.charts
80 }
81
82 func (c *Collector) Collect(context.Context) map[string]int64 {
83 mx, err := c.collect()
84 if err != nil {
85 c.Error(err)
86 return nil
87 }
88
89 return mx
90 }
91
92 func (c *Collector) Cleanup(context.Context) {}