JRPY
import pandas
import subprocess
import time
import logging
import sys
#Logging Initialization
logging.basicConfig(filename=’/data/jira_closure.log’,
format='[%(asctime)s
{%(pathname)s:%(lineno)d} :%(levelname)s
] \n %(message)s',
datefmt='%m-%d-%Y %H:%M:%S',
level=logging.INFO,
filemode='w')
logger=logging.getLogger(__name__)
from datetime import datetime,timedelta
import json
from jira import JIRA,JIRAError
from master_key import GETPWD
statTM= datetime.now()
pwd=GETPWD()
if len(sys.argv)
> 1:
dry-run=sys.argv[1]
logger.info(f"DEFAULT EXECUTION of {sys.argv[1]}
in DRY RUN (FLAG {dry-run})")
else:
dry-run="Y"
logger.info(f"DEFAULT EXECUTION of {sys.argv[1]}
in DRY RUN (FLAG {dry-run})")
def close_jira(jiraTKT,data):
print(f"Going to Close JIRA {jiraTKT}")
try:
issue=jira.issue(jiraTKT)
if
issue.fields.status.name== 'Production':
logger.info(f"JIRA {jiraTKT}
already in Production Status - No Action to take")
else:
fixVersions=[]
fixVersions.append({'name':'<fix version to use>'})
issue.update(fields=('fixVersions':fixVersions})
jira.add_comment(issue,f"JIRA
BOT CLOSED \n {data}")
jira.transition_issue(issue,u'Production')
logger.info(f"JIRA BOT CLOSED {jiraTKT}")
except JIRAError as e:
logger.info(f"Failed to Close JIRA {jiraTKT} with ERROR {e.status_code}
MESSAGE {e.text} ")
sys.exit(1)
return None
URL='https:jira.com'
#Hive Beeline Connection URL
hCon="jdbc:hive2://host:10000/db;principal=hive/_HOST@FQDN"
#Intantiate JIRA Connection
jira=JIRA(server=URL,basic_auth=('user',pwd))
toDAY=time.strftime('%Y%m%d_%H%M%S',time.localtime())
logger.info(f"STARTING
SCRIPT {sys.argv[0]} - DATE OF RUN {toDAY}")
opLOC='/data/jira/out'
opFL=f"{opLOC}/hiveOP.csv"
hiveQRY="""WITH
JIRCUR as (SELECT JIRA_TKT_NO,split(summary,'')[1] as
tbl_name from tbl1
WHERE status = 'Open' and issue_type='Bug'
and summary rlike('^Table [A-Z]\[a-z]|[0-9]* Not
Current'))
SELECT
JIRA_TKT_NO,tbl_name,b.run_date,b.table_name,b.log_table,b.last_received_date,b.source_system,b.load_status
from JIRCUR a
INNER JOIN
tbl2 b
ON (trim(a.tbl_name)=trim(b.table_name))
WHERE b.load_status = 'PASS'
and b.run_date = current_date
;"""
cmd=f'''beeline
-u "{hCon}" --silent=true --outputformat=csv2 -e "{hiveQRY}"
> {opLOC}/hive_tickets.txt '''
status,output=subprocess.getstatusoutput(cmd)
if status == 0:
logger.info(f"BEELINE COMMAND COMPLETED SUCESSFULLY {cmd} ")
else:
logger.info(f"BEELINE COMMAND {cmd}
FAILED WITH STATUS {status}")
#Load Hive Output file to DF using pandas
df=pd.read_csv(f"{opLOC}/hive_tickets.txt",header=0)
df.columns=['jira_key','jira_tbl','run_date','table_name','log_table','last_received_date','source_system','load_status']
print(len(df))
if df.empty:
logger.info(f"NO JIRA TICKET CANDIDATES FROM HIVE TABLE FOR {toDAY}")
sys.exit(0)
#ITERATE over each row in dataframe
and close jira ticket
for index,row in df.iterrows():
if dry-run == 'Y':
logger.info(f''' READY TO CLOSE \n JIRA ISSYE {row['jira_key']}
\n DATA {df.iloc[[index]].to_markdown(index=False,tablefmt="jira")}''')
else:
logger.info(f"NOW GOING TO CLOSE JIRA
{row['jira_key']}")
close_jira(row['jira_key'],df.iloc[[index]].to_markdown(index=False,tablefmt="jira"))
logger.info(f"BOT SCRIPT {sys.argv[0]} COMPLETED EXECUTION IN (HH:MM:SS.ssss)
:- {datetime.now() - statTM}
")
print(f"SCRIPT {sys.argv[0]} COMPLETED EXECUTION IN (HH:MM:SS.ssss)
:- {datetime.now() - statTM}
")
print("BOT SCRIPT COMPLETED ")
Comments
Post a Comment