Ema has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/366564 )

Change subject: varnish cachestats.py: cache statsd server IP
......................................................................


varnish cachestats.py: cache statsd server IP

Resolve statsd's server IP once every statsd_ip_ttl instead of doing it
every time a metric is sent.

Bug: T151643
Change-Id: I44765095dfd54be5796c33877256ee94de004844
---
M modules/varnish/files/cachestats.py
M modules/varnish/files/varnishstatsd
2 files changed, 24 insertions(+), 1 deletion(-)

Approvals:
  Ema: Looks good to me, approved
  Elukey: Looks good to me, but someone else must approve
  jenkins-bot: Verified
  Filippo Giunchedi: Looks good to me, but someone else must approve



diff --git a/modules/varnish/files/cachestats.py 
b/modules/varnish/files/cachestats.py
index cf3a0f4..ecb7860 100644
--- a/modules/varnish/files/cachestats.py
+++ b/modules/varnish/files/cachestats.py
@@ -9,7 +9,7 @@
   Subclasses are responsible for dealing with the details of parsing the log
   entries and generating stats.
 
-  Copyright 2016 Emanuele Rocca <[email protected]>
+  Copyright 2016-2017 Emanuele Rocca <[email protected]>
 
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -66,6 +66,8 @@
 
         ap.add_argument('--statsd-server', help='statsd server',
                         type=parse_statsd_server_string, default=None)
+        ap.add_argument('--statsd-ip-ttl', help='statsd IP TTL',
+                        type=int, default=60)
         ap.add_argument('--key-prefix', help='metric key prefix',
                         type=parse_prefix_string, default=self.key_prefix)
         ap.add_argument('--interval', help='send interval',
@@ -73,11 +75,30 @@
         self.args = ap.parse_args(argument_list)
 
         self.next_pub = time.time() + self.args.interval
+        self.next_statsd_ip_refresh = time.time() + self.args.statsd_ip_ttl
 
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 
         # Initialize stats to default values
         self.stats = self.default_stats
+
+        if self.args.statsd_server:
+            self.statsd_hostname = self.args.statsd_server[0]
+        else:
+            self.statsd_hostname = None
+
+    def resolve_statsd_ip(self, now=None):
+        """Resolve statsd's server IP. We do that every statsd_ip_ttl instead
+        of every time a metric is sent.
+
+        See https://phabricator.wikimedia.org/T151643""";
+        if now is None:
+            now = time.time()
+
+        if now >= self.next_statsd_ip_refresh:
+            statsd_ip = socket.gethostbyname(self.statsd_hostname)
+            self.args.statsd_server = statsd_ip, self.args.statsd_server[1]
+            self.next_statsd_ip_refresh = now + self.args.statsd_ip_ttl
 
     @property
     def default_stats(self):
@@ -109,6 +130,7 @@
                 buf.write(metric.encode('utf-8'))
             buf.seek(io.SEEK_SET)
             if self.args.statsd_server:
+                self.resolve_statsd_ip(now)
                 self.sock.sendto(buf.read(), self.args.statsd_server)
             else:
                 print(buf.read().decode('utf-8', errors='replace').rstrip())
diff --git a/modules/varnish/files/varnishstatsd 
b/modules/varnish/files/varnishstatsd
index c26be35..564ebfe 100755
--- a/modules/varnish/files/varnishstatsd
+++ b/modules/varnish/files/varnishstatsd
@@ -81,6 +81,7 @@
             data = self.buf.read()
 
             if self.args.statsd_server:
+                self.resolve_statsd_ip()
                 self.sock.sendto(data, self.args.statsd_server)
             else:
                 print(data.decode('utf-8', errors='replace').rstrip())

-- 
To view, visit https://gerrit.wikimedia.org/r/366564
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I44765095dfd54be5796c33877256ee94de004844
Gerrit-PatchSet: 5
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ema <[email protected]>
Gerrit-Reviewer: BBlack <[email protected]>
Gerrit-Reviewer: Elukey <[email protected]>
Gerrit-Reviewer: Ema <[email protected]>
Gerrit-Reviewer: Faidon Liambotis <[email protected]>
Gerrit-Reviewer: Filippo Giunchedi <[email protected]>
Gerrit-Reviewer: Volans <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to