#!/usr/bin/env python3 import asyncio import aiohttp import logging import os import re import json import sys from datetime import datetime as dt from datetime import timedelta as td from typing import Any, Optional from functools import wraps from secrets import compare_digest from databases import Database from cel import * from logging.config import dictConfig from pprint import pformat from inspect import getmembers _db = Database('mysql://{}:{}@{}:{}/{}'.format(os.getenv('MYSQL_USER', 'asterisk'), os.getenv('MYSQL_PASSWORD', 'secret'), os.getenv('MYSQL_SERVER', 'db'), os.getenv('APP_PORT_MYSQL', '3306'), os.getenv('FREEPBX_CDRDBNAME', None))) linkedid = sys.argv[1] async def main(): await _db.connect() _q = '''SELECT * FROM cel WHERE linkedid=:linkedid and eventtype = :eventtype''' _v = {'linkedid': linkedid, 'eventtype': 'ATTENDEDTRANSFER'} _f = True uniqueids = set(linkedid) #get ids of transferred calls async for row in _db.iterate(query=_q, values=_v): #print('\t'.join([str(k) for k in row])) extra = json.loads(row['extra']) uniqueids.add(extra['channel2_uniqueid']) _q = '''SELECT * FROM cdr WHERE linkedid=:linkedid or linkedid in (select distinct linkedid from cdr where uniqueid in :uniqueids) ORDER BY sequence;''' _v = {'linkedid': linkedid, 'uniqueids': uniqueids} _f = True unique_ids = set() events = CdrEvents() async for row in _db.iterate(query=_q, values=_v): events.add(row) print(events.simple()) await _db.disconnect() if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main())