Qlik Sense Python ile Belirli Bir Süreden Fazla Çalışan Taskları Bulma

Qlik Sense üzeriden, python kullanarak belirli bir süreden fazladır çalışan taskları HTML tablo olarak alabiliriz.

# -*- coding: utf-8 -*-
import qsAPI
from datetime import datetime, timedelta
import sys
import io
from datetime import datetime
from tabulate import tabulate

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding='utf-8')


def bordered_html_table(html_data,headers):

    add_border_to_html = "<table border=\"1\">"
    html_table = tabulate(html_data, headers, tablefmt="html")

    html_table = html_table.replace("<table>", add_border_to_html)
    return html_table


def connectQliksense(proxy, domain, user, passwd):
    qlik_conn = qsAPI.QRS(proxy=proxy, user=(domain, user, passwd), verbosity='CRITICAL')
    return qlik_conn


def convert_qmc_status(status):
    if status == 2:
        status_string = "Started"
    elif status == 3:
        status_string = "Queued"
    elif status == 7:
        status_string = "Success"
    elif status == 8:
        status_string = "Failed"
    else:
        status_string = status
    return status_string


# take third element for sort
def sort_list(elem):
    return elem[4]


# qliksense connection variables 
proxy_qliksense_tr = "PROXY_MACHINE"
domain_qliksense_tr = "DOMAIN"
user_qliksense_tr = "USERNAME"
passwd_qliksense_tr = "PASSWORD"
# connect to qliksense
qliksense_conn = connectQliksense(proxy_qliksense_tr, domain_qliksense_tr, user_qliksense_tr, passwd_qliksense_tr)
# get app list
tasks = qliksense_conn.TaskGet()

task_html = list()
for task in tasks:
    task_list = list()
    # print(task)
    start_time = datetime.strptime(task['operational']['lastExecutionResult']['startTime'][:-5],
                                   '%Y-%m-%dT%H:%M:%S') + timedelta(hours=3)
    task_run_time = datetime.now() - start_time
    # check if task is running and bigger than specified time
    if task['operational']['lastExecutionResult']['status'] == 2 and task_run_time > timedelta(minutes=30):
        task_list.append(task['name'])
        if "app" in task:
            task_list.append(task['app']['stream']['name'])
        else:
            task_list.append("No Stream")
        task_list.append(task['operational']['lastExecutionResult']['executingNodeName'])
        task_list.append(convert_qmc_status(task['operational']['lastExecutionResult']['status']))
        task_list.append(start_time)
        task_list.append(task['operational']['lastExecutionResult']['stopTime'])
        task_list.append(task_run_time)
        task_html.append(task_list)

if len(task_html) == 0:
    print(None)
else:
    # create headers for list
    headers = ["Task Name", "Stream Name", "Executing Node Name", "Status", "Start Time", "Task Run Time"]
    # sort list
    task_html.sort(reverse=True, key=sort_list)
    # create html table for list
    table = bordered_html_table(task_html, headers)

    print(table)

Leave a Comment