diff options
Diffstat (limited to '')
-rw-r--r-- | src/go/collectors/go.d.plugin/modules/nginxplus/cache.go | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/nginxplus/cache.go b/src/go/collectors/go.d.plugin/modules/nginxplus/cache.go new file mode 100644 index 000000000..af58f3a55 --- /dev/null +++ b/src/go/collectors/go.d.plugin/modules/nginxplus/cache.go @@ -0,0 +1,172 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package nginxplus + +func newCache() *cache { + return &cache{ + httpCaches: make(map[string]*cacheHTTPCacheEntry), + httpServerZones: make(map[string]*cacheZoneEntry), + httpLocationZones: make(map[string]*cacheZoneEntry), + httpUpstreams: make(map[string]*cacheUpstreamEntry), + httpUpstreamServers: make(map[string]*cacheUpstreamServerEntry), + streamServerZones: make(map[string]*cacheZoneEntry), + streamUpstreams: make(map[string]*cacheUpstreamEntry), + streamUpstreamServers: make(map[string]*cacheUpstreamServerEntry), + resolvers: make(map[string]*cacheResolverEntry), + } +} + +type ( + cache struct { + httpCaches map[string]*cacheHTTPCacheEntry + httpServerZones map[string]*cacheZoneEntry + httpLocationZones map[string]*cacheZoneEntry + httpUpstreams map[string]*cacheUpstreamEntry + httpUpstreamServers map[string]*cacheUpstreamServerEntry + streamServerZones map[string]*cacheZoneEntry + streamUpstreams map[string]*cacheUpstreamEntry + streamUpstreamServers map[string]*cacheUpstreamServerEntry + resolvers map[string]*cacheResolverEntry + } + cacheEntry struct { + hasCharts bool + updated bool + notSeenTimes int + } + cacheHTTPCacheEntry struct { + name string + cacheEntry + } + cacheResolverEntry struct { + zone string + cacheEntry + } + cacheZoneEntry struct { + zone string + cacheEntry + } + cacheUpstreamEntry struct { + name string + zone string + cacheEntry + } + cacheUpstreamServerEntry struct { + name string + zone string + serverAddr string + serverName string + cacheEntry + } +) + +func (c *cache) resetUpdated() { + for _, v := range c.httpCaches { + v.updated = false + } + for _, v := range c.httpServerZones { + v.updated = false + } + for _, v := range c.httpLocationZones { + v.updated = false + } + for _, v := range c.httpUpstreams { + v.updated = false + } + for _, v := range c.httpUpstreamServers { + v.updated = false + } + for _, v := range c.streamServerZones { + v.updated = false + } + for _, v := range c.streamUpstreams { + v.updated = false + } + for _, v := range c.streamUpstreamServers { + v.updated = false + } + for _, v := range c.resolvers { + v.updated = false + } +} + +func (c *cache) putHTTPCache(cache string) { + v, ok := c.httpCaches[cache] + if !ok { + v = &cacheHTTPCacheEntry{name: cache} + c.httpCaches[cache] = v + } + v.updated, v.notSeenTimes = true, 0 +} + +func (c *cache) putHTTPServerZone(zone string) { + v, ok := c.httpServerZones[zone] + if !ok { + v = &cacheZoneEntry{zone: zone} + c.httpServerZones[zone] = v + } + v.updated, v.notSeenTimes = true, 0 +} + +func (c *cache) putHTTPLocationZone(zone string) { + v, ok := c.httpLocationZones[zone] + if !ok { + v = &cacheZoneEntry{zone: zone} + c.httpLocationZones[zone] = v + } + v.updated, v.notSeenTimes = true, 0 +} + +func (c *cache) putHTTPUpstream(name, zone string) { + v, ok := c.httpUpstreams[name+"_"+zone] + if !ok { + v = &cacheUpstreamEntry{name: name, zone: zone} + c.httpUpstreams[name+"_"+zone] = v + } + v.updated, v.notSeenTimes = true, 0 +} + +func (c *cache) putHTTPUpstreamServer(name, serverAddr, serverName, zone string) { + v, ok := c.httpUpstreamServers[name+"_"+serverAddr+"_"+zone] + if !ok { + v = &cacheUpstreamServerEntry{name: name, zone: zone, serverAddr: serverAddr, serverName: serverName} + c.httpUpstreamServers[name+"_"+serverAddr+"_"+zone] = v + } + v.updated, v.notSeenTimes = true, 0 +} + +func (c *cache) putStreamServerZone(zone string) { + v, ok := c.streamServerZones[zone] + if !ok { + v = &cacheZoneEntry{zone: zone} + c.streamServerZones[zone] = v + } + v.updated, v.notSeenTimes = true, 0 + +} + +func (c *cache) putStreamUpstream(name, zone string) { + v, ok := c.streamUpstreams[name+"_"+zone] + if !ok { + v = &cacheUpstreamEntry{name: name, zone: zone} + c.streamUpstreams[name+"_"+zone] = v + } + v.updated, v.notSeenTimes = true, 0 +} + +func (c *cache) putStreamUpstreamServer(name, serverAddr, serverName, zone string) { + v, ok := c.streamUpstreamServers[name+"_"+serverAddr+"_"+zone] + if !ok { + v = &cacheUpstreamServerEntry{name: name, zone: zone, serverAddr: serverAddr, serverName: serverName} + c.streamUpstreamServers[name+"_"+serverAddr+"_"+zone] = v + } + v.updated, v.notSeenTimes = true, 0 +} + +func (c *cache) putResolver(zone string) { + v, ok := c.resolvers[zone] + if !ok { + v = &cacheResolverEntry{zone: zone} + c.resolvers[zone] = v + } + v.updated, v.notSeenTimes = true, 0 +} |