Madhuvishy has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/337787 )

Change subject: tools: Read list of tools for precise email reminder from 
precise-tools dashboard
......................................................................

tools: Read list of tools for precise email reminder from precise-tools 
dashboard

Change-Id: Iace759737686b127626553a67f3fcdef2fe6c5b5
---
M modules/role/manifests/toollabs/precise_reminder.pp
M modules/toollabs/files/precise_reminder.py
2 files changed, 16 insertions(+), 77 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/87/337787/1

diff --git a/modules/role/manifests/toollabs/precise_reminder.pp 
b/modules/role/manifests/toollabs/precise_reminder.pp
index b885534..a45e058 100644
--- a/modules/role/manifests/toollabs/precise_reminder.pp
+++ b/modules/role/manifests/toollabs/precise_reminder.pp
@@ -18,7 +18,7 @@
     cron { 'precise-reminder':
         ensure      => 'present',
         user        => 'root',
-        command     => '/usr/bin/tail -500000 /data/project/.system/accounting 
| /usr/local/sbin/precise-reminder',
+        command     => '/usr/local/sbin/precise-reminder',
         weekday     => 3,
         hour        => 22,
         minute      => 15,
diff --git a/modules/toollabs/files/precise_reminder.py 
b/modules/toollabs/files/precise_reminder.py
index b370a2f..543216c 100644
--- a/modules/toollabs/files/precise_reminder.py
+++ b/modules/toollabs/files/precise_reminder.py
@@ -23,8 +23,7 @@
 # Maps tool users to precise tools, and sends reminder emails to all tool
 # maintainers to move their tools of precise before deprecation.
 #
-# Run like tail -500000 /data/project/.system/accounting | 
./precise-reminder.py
-# from tools bastions
+# Run ./precise-reminder.py from tools bastions
 #
 
 from email.mime.text import MIMEText
@@ -62,35 +61,22 @@
                             password=config['password'])
 
 
-def uid_from_dn(dn):
-    keys = dn.split(',')
-    uid_key = keys[0]
-    uid = uid_key.split('=')[1]
-    return uid
-
-
-def tools_members(config, tools):
+def tools_members():
     """
-    Return a dict that has members of a tool associated with each tool
+    Query the precise-tools tool and return a dict with tool names associated 
with
+    a list of members
     Ex:
-    {'tools.musikbot': ['musikanimal'],
-     'tools.ifttt': ['slaporte', 'mahmoud', 'madhuvishy', 'ori']}
+    {'musikbot': ['musikanimal'],
+     'ifttt': ['slaporte', 'mahmoud', 'madhuvishy', 'ori']}
     """
-    tool_to_members = collections.defaultdict(list)
-    with ldap_conn(config) as conn:
-        for tool in tools:
-            conn.search(
-                'ou=servicegroups,dc=wikimedia,dc=org',
-                '(cn={})'.format(tool),
-                ldap3.SEARCH_SCOPE_WHOLE_SUBTREE,
-                attributes=['member', 'cn'],
-                time_limit=5
-            )
-            for resp in conn.response:
-                attributes = resp.get('attributes')
-                members = attributes.get('member', [])
-                tool_to_members[tool].extend([uid_from_dn(member) for member 
in members])
-    return tool_to_members
+    all_precise_tools = []
+    conn = http.client.HTTPConnection('tools.wmflabs.org')
+    conn.request("GET", "/precise-tools/json",
+                 headers={"User-Agent": "Precise reminder 
emailer|[email protected]"})
+    res = conn.getresponse().read().decode('utf-8')
+    if res:
+        tools = json.loads(res)["tools"]
+    return {tool_name: tool_info["members"] for tool_name, tool_info in 
tools.items()}
 
 
 def members_tools(tool_to_members):
@@ -100,53 +86,6 @@
             if tool not in member_to_tools[m]:
                 member_to_tools[m].append(tool)
     return member_to_tools
-
-
-def is_precise_host(hostname):
-    if hostname[-4:].startswith('12'):
-        return True
-
-
-def grid_precise_tools():
-    all_precise_tools = []
-    conn = http.client.HTTPConnection('tools.wmflabs.org')
-    conn.request("GET", "/gridengine-status",
-                 headers={"User-Agent": "Precise tools 
finder|[email protected]"})
-    res = conn.getresponse().read().decode('utf-8')
-    if res:
-        grid_info = json.loads(res)["data"]["attributes"]
-    for hostname, info in grid_info.items():
-        if is_precise_host(hostname):
-            if info["jobs"]:
-                all_precise_tools.extend([job["job_owner"] for job in 
info["jobs"].values()])
-    return all_precise_tools
-
-
-def accounting_tools():
-    DAYS = 7
-    FIELD_NAMES = [
-        'qname', 'hostname', 'group', 'owner', 'job_name', 'job_number', 
'account',
-        'priority', 'submission_time', 'start_time', 'end_time', 'failed',
-        'exit_status', 'ru_wallclock', 'ru_utime', 'ru_stime', 'ru_maxrss',
-        'ru_ixrss', 'ru_ismrss', 'ru_idrss', 'ru_isrss', 'ru_minflt', 
'ru_majflt',
-        'ru_nswap', 'ru_inblock', 'ru_oublock', 'ru_msgsnd', 'ru_msgrcv',
-        'ru_nsignals', 'ru_nvcsw', 'ru_nivcsw', 'project', 'department',
-        'granted_pe', 'slots', 'task_number', 'cpu', 'mem', 'io', 'category',
-        'iow', 'pe_taskid', 'maxvemem', 'arid', 'ar_submission_time',
-    ]
-
-    cutoff = (datetime.datetime.now() - 
datetime.timedelta(days=DAYS)).timestamp()
-    precise_tools = []
-
-    for line in fileinput.input():
-        parts = line.split(':')
-        job = dict(zip(FIELD_NAMES, parts))
-        if int(job['end_time']) < cutoff:
-            continue
-        if 'release=precise' in job['category'] and job['owner'] not in 
precise_tools:
-            precise_tools.append(job['owner'])
-
-    return precise_tools
 
 
 def member_emails(member_uids):
@@ -216,7 +155,7 @@
 with open('/etc/ldap.yaml') as f:
     config = yaml.safe_load(f)
 
-tool_to_members = tools_members(config, accounting_tools() + 
grid_precise_tools())
+tool_to_members = tools_members()
 logging.info("Tools on precise: \n {}".format(tool_to_members.keys()))
 mt = members_tools(tool_to_members)
 logging.info("Users being reminded: \n {}".format(mt.keys()))

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iace759737686b127626553a67f3fcdef2fe6c5b5
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Madhuvishy <[email protected]>

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

Reply via email to