firehol/netdata

View on GitHub
src/go/plugin/go.d/modules/nginxplus/cache.go

Summary

Maintainability
A
3 hrs
Test Coverage
// 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
}