github.com/netdata/go.d.plugin@v0.58.1/modules/nginxplus/cache.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package nginxplus
     4  
     5  func newCache() *cache {
     6  	return &cache{
     7  		httpCaches:            make(map[string]*cacheHTTPCacheEntry),
     8  		httpServerZones:       make(map[string]*cacheZoneEntry),
     9  		httpLocationZones:     make(map[string]*cacheZoneEntry),
    10  		httpUpstreams:         make(map[string]*cacheUpstreamEntry),
    11  		httpUpstreamServers:   make(map[string]*cacheUpstreamServerEntry),
    12  		streamServerZones:     make(map[string]*cacheZoneEntry),
    13  		streamUpstreams:       make(map[string]*cacheUpstreamEntry),
    14  		streamUpstreamServers: make(map[string]*cacheUpstreamServerEntry),
    15  		resolvers:             make(map[string]*cacheResolverEntry),
    16  	}
    17  }
    18  
    19  type (
    20  	cache struct {
    21  		httpCaches            map[string]*cacheHTTPCacheEntry
    22  		httpServerZones       map[string]*cacheZoneEntry
    23  		httpLocationZones     map[string]*cacheZoneEntry
    24  		httpUpstreams         map[string]*cacheUpstreamEntry
    25  		httpUpstreamServers   map[string]*cacheUpstreamServerEntry
    26  		streamServerZones     map[string]*cacheZoneEntry
    27  		streamUpstreams       map[string]*cacheUpstreamEntry
    28  		streamUpstreamServers map[string]*cacheUpstreamServerEntry
    29  		resolvers             map[string]*cacheResolverEntry
    30  	}
    31  	cacheEntry struct {
    32  		hasCharts    bool
    33  		updated      bool
    34  		notSeenTimes int
    35  	}
    36  	cacheHTTPCacheEntry struct {
    37  		name string
    38  		cacheEntry
    39  	}
    40  	cacheResolverEntry struct {
    41  		zone string
    42  		cacheEntry
    43  	}
    44  	cacheZoneEntry struct {
    45  		zone string
    46  		cacheEntry
    47  	}
    48  	cacheUpstreamEntry struct {
    49  		name string
    50  		zone string
    51  		cacheEntry
    52  	}
    53  	cacheUpstreamServerEntry struct {
    54  		name       string
    55  		zone       string
    56  		serverAddr string
    57  		serverName string
    58  		cacheEntry
    59  	}
    60  )
    61  
    62  func (c *cache) resetUpdated() {
    63  	for _, v := range c.httpCaches {
    64  		v.updated = false
    65  	}
    66  	for _, v := range c.httpServerZones {
    67  		v.updated = false
    68  	}
    69  	for _, v := range c.httpLocationZones {
    70  		v.updated = false
    71  	}
    72  	for _, v := range c.httpUpstreams {
    73  		v.updated = false
    74  	}
    75  	for _, v := range c.httpUpstreamServers {
    76  		v.updated = false
    77  	}
    78  	for _, v := range c.streamServerZones {
    79  		v.updated = false
    80  	}
    81  	for _, v := range c.streamUpstreams {
    82  		v.updated = false
    83  	}
    84  	for _, v := range c.streamUpstreamServers {
    85  		v.updated = false
    86  	}
    87  	for _, v := range c.resolvers {
    88  		v.updated = false
    89  	}
    90  }
    91  
    92  func (c *cache) putHTTPCache(cache string) {
    93  	v, ok := c.httpCaches[cache]
    94  	if !ok {
    95  		v = &cacheHTTPCacheEntry{name: cache}
    96  		c.httpCaches[cache] = v
    97  	}
    98  	v.updated, v.notSeenTimes = true, 0
    99  }
   100  
   101  func (c *cache) putHTTPServerZone(zone string) {
   102  	v, ok := c.httpServerZones[zone]
   103  	if !ok {
   104  		v = &cacheZoneEntry{zone: zone}
   105  		c.httpServerZones[zone] = v
   106  	}
   107  	v.updated, v.notSeenTimes = true, 0
   108  }
   109  
   110  func (c *cache) putHTTPLocationZone(zone string) {
   111  	v, ok := c.httpLocationZones[zone]
   112  	if !ok {
   113  		v = &cacheZoneEntry{zone: zone}
   114  		c.httpLocationZones[zone] = v
   115  	}
   116  	v.updated, v.notSeenTimes = true, 0
   117  }
   118  
   119  func (c *cache) putHTTPUpstream(name, zone string) {
   120  	v, ok := c.httpUpstreams[name+"_"+zone]
   121  	if !ok {
   122  		v = &cacheUpstreamEntry{name: name, zone: zone}
   123  		c.httpUpstreams[name+"_"+zone] = v
   124  	}
   125  	v.updated, v.notSeenTimes = true, 0
   126  }
   127  
   128  func (c *cache) putHTTPUpstreamServer(name, serverAddr, serverName, zone string) {
   129  	v, ok := c.httpUpstreamServers[name+"_"+serverAddr+"_"+zone]
   130  	if !ok {
   131  		v = &cacheUpstreamServerEntry{name: name, zone: zone, serverAddr: serverAddr, serverName: serverName}
   132  		c.httpUpstreamServers[name+"_"+serverAddr+"_"+zone] = v
   133  	}
   134  	v.updated, v.notSeenTimes = true, 0
   135  }
   136  
   137  func (c *cache) putStreamServerZone(zone string) {
   138  	v, ok := c.streamServerZones[zone]
   139  	if !ok {
   140  		v = &cacheZoneEntry{zone: zone}
   141  		c.streamServerZones[zone] = v
   142  	}
   143  	v.updated, v.notSeenTimes = true, 0
   144  
   145  }
   146  
   147  func (c *cache) putStreamUpstream(name, zone string) {
   148  	v, ok := c.streamUpstreams[name+"_"+zone]
   149  	if !ok {
   150  		v = &cacheUpstreamEntry{name: name, zone: zone}
   151  		c.streamUpstreams[name+"_"+zone] = v
   152  	}
   153  	v.updated, v.notSeenTimes = true, 0
   154  }
   155  
   156  func (c *cache) putStreamUpstreamServer(name, serverAddr, serverName, zone string) {
   157  	v, ok := c.streamUpstreamServers[name+"_"+serverAddr+"_"+zone]
   158  	if !ok {
   159  		v = &cacheUpstreamServerEntry{name: name, zone: zone, serverAddr: serverAddr, serverName: serverName}
   160  		c.streamUpstreamServers[name+"_"+serverAddr+"_"+zone] = v
   161  	}
   162  	v.updated, v.notSeenTimes = true, 0
   163  }
   164  
   165  func (c *cache) putResolver(zone string) {
   166  	v, ok := c.resolvers[zone]
   167  	if !ok {
   168  		v = &cacheResolverEntry{zone: zone}
   169  		c.resolvers[zone] = v
   170  	}
   171  	v.updated, v.notSeenTimes = true, 0
   172  }