diff --git a/inventory_provider/db/opsdb.py b/inventory_provider/db/opsdb.py index 5e6466ba768aeb9bb8b40e3edf1182ca502d2ecd..37c0f1b7984066105bba72d57ae9271d5682698a 100644 --- a/inventory_provider/db/opsdb.py +++ b/inventory_provider/db/opsdb.py @@ -436,3 +436,30 @@ AND circuit_type = 'Path' crs.execute(parent_query, [circuit['absid']]) r = _convert_to_dict(crs) return _fields2rsp(r[0]) if r else None + + +def get_service_users(connection, service_ids): + + def _sublists(l, n): + for x in range(0, len(l), n): + yield l[x:x + n] + + # not sure how to use a tuple in a prepared statement, + # so this is just doing a dumb string replacement ... + query = ( + 'select c.absid, o.name' + ' from organisation o' + ' join circuit_orgs co on co.org_absid=o.absid' + ' join circuit c on c.absid=co.circ_absid' + ' where co.org_type=\'Circuit User\'' + ' and c.absid in (%s)') + + with db.cursor(connection) as crs: + for chunk in _sublists(service_ids, 20): + crs.execute(query % ','.join([str(x) for x in chunk])) + for r in crs.fetchall(): + yield {'service_id': r[0], 'user': r[1]} + + + +