This is an automated email from the ASF dual-hosted git repository.

humbedooh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kibble-scanners.git


The following commit(s) were added to refs/heads/master by this push:
     new ac30427  Fake user email if nto provided by JIRA
ac30427 is described below

commit ac30427ace2767750c905883b7495304852190d3
Author: Daniel Gruno <humbed...@apache.org>
AuthorDate: Mon Dec 31 05:50:32 2018 +0100

    Fake user email if nto provided by JIRA
    
    In some instances, JIRA will have email visibility turned
    off for the REST API. In such instances, we should use the
    domain of the JIRA instance and the username (which is still
    visible to us) to fake an email address. While not perfect,
    this still allows us to get a good unique count of actors.
---
 src/plugins/scanners/jira.py | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/src/plugins/scanners/jira.py b/src/plugins/scanners/jira.py
index 82703bc..0320ffe 100644
--- a/src/plugins/scanners/jira.py
+++ b/src/plugins/scanners/jira.py
@@ -111,6 +111,15 @@ def scanTicket(KibbleBit, key, u, source, creds, 
openTickets):
     found = True
     doc= None
     parseIt = False
+    
+    # the 'domain' var we try to figure out here is used
+    # for faking email addresses and keep them unique,
+    # in case JIRA has email visibility turned off.
+    domain = 'jira'
+    m = re.search(r"https?://([^/]+)", u)
+    if m:
+        domain = m.group(1)
+    
     found = KibbleBit.exists('issue', dhash)
     if not found:
         KibbleBit.pprint("[%s] We've never seen this ticket before, 
parsing..." % key)
@@ -129,7 +138,7 @@ def scanTicket(KibbleBit, key, u, source, creds, 
openTickets):
             #KibbleBit.pprint("[%s] Ticket hasn't changed, ignoring..." % key)
     
     if parseIt:
-        KibbleBit.pprint("[%s] Parsing data from JIRA..." % key)
+        KibbleBit.pprint("[%s] Parsing data from JIRA at %s..." % (key, 
domain))
         queryURL = 
"%s/rest/api/2/issue/%s?fields=creator,reporter,status,issuetype,summary,assignee,resolutiondate,created,priority,changelog,comment,resolution,votes&expand=changelog"
 % (u, key)
         jiraURL = "%s/browse/%s" % (u, key)
         try:
@@ -156,12 +165,16 @@ def scanTicket(KibbleBit, key, u, source, creds, 
openTickets):
         comments = 0
         if 'comment' in tjson['fields'] and tjson['fields']['comment']:
             comments = tjson['fields']['comment']['total']
-        assignee = tjson['fields']['assignee'].get('emailAddress') if 
tjson['fields'].get('assignee') else None
-        creator = tjson['fields']['reporter'].get('emailAddress') if 
tjson['fields'].get('reporter') else None
+        assignee = tjson['fields']['assignee'].get('emailAddress', # Try 
email, fall back to username
+                                                   
tjson['fields']['assignee'].get('name')) if tjson['fields'].get('assignee') 
else None
+        creator = tjson['fields']['reporter'].get('emailAddress', # Try email, 
fall back to username
+                                                   
tjson['fields']['reporter'].get('name')) if tjson['fields'].get('reporter') 
else None
         title = tjson['fields']['summary']
         if closer:
             #print("Parsing closer")
-            closerEmail = closer.get('emailAddress', 
'unknown@kibble').replace(" dot ", ".", 10).replace(" at ", "@", 1)
+            closerEmail = closer.get('emailAddress', 
closer.get('name')).replace(" dot ", ".", 10).replace(" at ", "@", 1)
+            if not '@' in closerEmail:
+                closerEmail = '%s@%s' % (closerEmail, domain)
             displayName = closer.get('displayName', 'Unkown')
             if displayName and len(displayName) > 0:
                 # Add to people db
@@ -177,6 +190,8 @@ def scanTicket(KibbleBit, key, u, source, creds, 
openTickets):
             
         if creator:
             creator = creator.replace(" dot ", ".", 10).replace(" at ", "@", 1)
+            if not '@' in creator:
+                creator = '%s@%s' % (creator, domain)
             displayName = tjson['fields']['reporter']['displayName'] if 
tjson['fields']['reporter'] else None
             if displayName and len(displayName) > 0:
                 # Add to people db
@@ -189,7 +204,8 @@ def scanTicket(KibbleBit, key, u, source, creds, 
openTickets):
                     'upsert': True
                 }
                 KibbleBit.append('person', jsp)
-            
+        if assignee and not '@' in assignee:
+            assignee = '%s@%s' % (assignee, domain)
         jso = {
             'id': dhash,
             'key': key,

Reply via email to