Targetprocess
Ноутбуки, используемые в примере:
В данной статье рассматривается пример получения данных с системы Targetprocess https://www.targetprocess.com. Targetprocess - очень мощная и сложная система со своей встроенной аналитикой, поэтому здесь будет только маленький кусочек, а именно получение реквестов с типом “ошибка” и информации по ним. Ниже пример таблицы на выходе, которая будет загружаться в платформу.
Здесь не рассматривается:
Данные будут забираться с Targetprocess вручную. Для регулярной автоматический выгрузки необходимо настроить планировщик Chronicle.
Для дальнейшей загрузки в платформу можно воспользоваться стандартными средствами в платформе: “создание загрузчика” и “планы загрузки”. Всё описано в разделе документации (ссылка для версии 2.17):
https://docs.visiology.su/wiki/pages/createpage.action?spaceKey=v17&title=%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B8%20%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B%20%D0%B2%20%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9%20%D0%B1%D0%B0%D0%B7%D0%B5%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20ViQubeПодробности работы подключенных Python библиотек. Это необходимо изучать отдельно.
Сначала необходимо внимательно ознакомиться с описанием работы библиотеки python для Targetprocess :https://github.com/magicjohnson/targetprocess-client , а также с API Targetprocess https://dev.targetprocess.com/docs/rest-getting-started.
Теперь можно приступать к работе в JupyterLab.
Создаем новый ноутбук.
Первым блоком подключаем все необходимые нам для работы Python библиотеки:
import petl as etl from targetprocess.api import TargetProcessAPIClient from targetprocess.serializers import TargetProcessSerializerВторым блоком подключаемся к Targetprocess , используя адрес своего портала, логин и пароль.
tp = TargetProcessAPIClient(api_url='https://name.tpondemand.com/api/v1/', user='user@site.com', password='123')Получаем нужные нам данные по релизам и второй строчкой сразу вытаскиваем из них список, содержащий данные непосредственно по релизам.
request_json = tp.get_collection(collection="Release", take = 1000,include="[Name,StartDate,EndDate,Project]" ) ListJson = TargetProcessSerializer.deserialize(request_json)В следующих строках:
формируем таблицу petl из списка,
создаем новый столбец “Type” из данных столбца “Project”,
удаляем столбец “Project”,
Убираем все ненужные нам данные по полям “Type” и “Priority Backlog”.
Rtable1 = etl.fromdicts(ListJson, header=['Name','StartDate', 'EndDate','Project']) Rtable2 = etl.addfield(Rtable1, 'Type', lambda row: row['Project']['Name']) Rtable3 = etl.cutout(Rtable2, 'Project') Rtable4 = etl.select(Rtable3,lambda rec: rec.Type != 'Flipbox' and rec.Name != 'Priority Backlog')
После преобразование данных по релизам с помощью petl снова кладем их в список.
RList = etl.dicts(Rtable4) ReleaseList = list(RList)Получаем нужные нам данные по реквестам и второй строчкой сразу вытаскиваем из них список, содержащий данные непосредственно по ним.
request_json2 = tp.get_collection(collection="Requests", take = 1000000000,include="[Id,Name,RequestType,CreateDate]") ListJson2 = TargetProcessSerializer.deserialize(request_json2)В следующих строках:
формируем таблицу реквестов petl из списка реквестов,
создаем новый столбец “Type” из данных столбца “RequestType”,
удаляем столбец “RequestType”,
оставляем только записи с типом “Ошибка”.
Rqtable1 = etl.fromdicts(ListJson2, header=['Id','CreateDate', 'RequestType', 'Name']) Rqtable2 = etl.addfield(Rqtable1, 'Type', lambda row: row['RequestType']['Name']) Rqtable3 = etl.cut(Rqtable2, 'Id', 'CreateDate','Name','Type') Rqtable4 = etl.select(Rqtable3,lambda rec: rec.Type == 'Ошибка')Добавляем в таблицу по реквестам Rqtable4 новое поле и вносим туда соответствующий релиз. После приводим название релиза к конечному виду.
table5 = etl.addfield(Rqtable4, 'Release', lambda row: [ r['Name'] for r in ReleaseList if (r['StartDate']<row['CreateDate']<r['EndDate'])]) table6 = etl.convert(table5,'Release', lambda v:v[0] if v==v else '' )Экспортируем в Excel.
etl.toxlsx(table6,'BugListWithRelease.xlsx')
Полученные файлы можно брать и загружать в платформу через стандартный загрузчик. На этом работа в ViXtract завершена.