def run_rapi(): api_log.info('Starting up RCCN API manager') app = RESTResource( (SubscriberRESTService(), ResellerRESTService(), CreditRESTService(), StatisticsRESTService(), SMSRESTService(), ChatRESTService(), ConfigurationRESTService())) app.run(8085)
def put(self, request, msisdn='', name='', balance='', authorized='', subscription_status='', location='', equipment='', roaming='', package=''): api_log.info( '%s - [PUT] %s/%s Data: name:"%s" balance:"%s" authorized:"%s" ' 'subscription_status:"%s" location:"%s" equipment:"%s" roaming:"%s" package:"%s"', request.getHost().host, self.path, msisdn, name, balance, authorized, subscription_status, location, equipment, roaming, package) try: sub = Subscriber() if subscription_status != '': sub.subscription(msisdn, subscription_status) if authorized != '': sub.authorized(msisdn, authorized) if msisdn != '' and name != '' or balance != '': sub.edit(msisdn, name, balance, location, equipment, roaming, package) data = {'status': 'success', 'error': ''} except SubscriberException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def offline(self, request, msisdn='', local='no'): api_log.info('%s - [PUT] %s/offline Data: msisdn: "%s"', request.getClientIP(), self.path, msisdn) try: sub = Subscriber() sub.expire_lu(msisdn) data = {'status': 'success', 'error': ''} except SubscriberException as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return data # Take advantage to point this subscriber to the new location in our hlr # so we (at least) don't have to wait for the next hlr sync run try: if local == 'yes': current_bts = config['local_ip'] else: current_bts = request.getClientIP() cur = db_conn.cursor() now = datetime.datetime.fromtimestamp(int(time.time())) cur.execute( 'UPDATE hlr SET current_bts=%(current_bts)s, updated=%(updated)s WHERE msisdn=%(msisdn)s', { 'msisdn': msisdn, 'current_bts': current_bts, 'updated': now }) db_conn.commit() except psycopg2.DatabaseError as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return data api_log.debug(data) return data
def calls_contexts_stats(self, request): api_log.info('%s - [GET] %s/calls/contexts', request.getHost().host, self.path) try: stats = CallsStatistics() data = json.dumps(stats.get_contexts_stats(), cls=PGEncoder) except StatisticException as e: data = {'status': 'failed', 'error': str(e)} return data
def search(self, request, search): api_log.info('%s - [GET] %s', request.getHost().host, self.path) try: sub = Subscriber() data = json.dumps(sub.get_msisdn_autocomplete(search)) except SubscriberException as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return data
def get(self, request): api_log.info('%s - [GET] %s/', request.getHost().host, self.path) try: credit = Credit() data = json.dumps(credit.get_all_credit_allocated(), cls=PGEncoder) except CreditException as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return data
def getAll(self, request): api_log.info('%s - [GET] %s', request.getHost().host, self.path) try: reseller = Subscriber() data = json.dumps(reseller.get_all(), cls=PGEncoder) except ResellerException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def get_sms_stat(self, request, year, month): api_log.info('%s - [GET] %s/calls/obm', request.getHost().host, self.path) try: stats = CallsStatistics() data = json.dumps(stats.get_sms_stat(year, month), cls=PGEncoder) except StatisticException as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return str(data)
def total_minutes(self, request): api_log.info('%s - [GET] %s/calls/total_minutes', request.getHost().host, self.path) try: stats = CallsStatistics() data = stats.get_total_minutes() except StatisticException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return str(data)
def records(self, request, year): api_log.info('%s - [GET] %s/records %s', request.getHost().host, self.path, year) try: credit = Credit() data = json.dumps(credit.get_credit_records(year), cls=PGEncoder) except CreditException as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return data
def top_destinations(self, request): api_log.info('%s - [GET] %s/top_destinations', request.getHost().host, self.path) try: stats = CostsStatistics() data = json.dumps(stats.get_top_destinations(), cls=PGEncoder) except StatisticException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def average_call_duration(self, request): api_log.info('%s - [GET] %s/calls/average_call_duration', request.getHost().host, self.path) try: stats = CallsStatistics() data = json.dumps(stats.get_average_call_duration(), cls=PGEncoder) except StatisticException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def credits_stats(self, request, period): api_log.info('%s - [POST] %s/costs/credits_stats Data: period:"%s"', request.getHost().host, self.path, period) try: stats = CostsStatistics() data = json.dumps(stats.get_credits_stats(period), cls=PGEncoder) except StatisticException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def imei(self, request, partial_imei): api_log.info('%s - [GET] %s/%s', request.getHost().host, self.path, partial_imei) try: sub = Subscriber() data = json.dumps(sub.get_imei_autocomplete(partial_imei)) except SubscriberException as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return data
def total_calls_by_context(self, request, context): api_log.info( '%s - [POST] %s/calls/total_calls_by_context Data: context:"%s"', request.getHost().host, self.path, context) try: stats = CallsStatistics() data = stats.get_total_calls_by_context(context) except StatisticException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def send_broadcast(self, request, text, btype, location): api_log.info( '%s - [POST] %s/send_broadcast Data: text:"%s" btype:[%s] location:"%s"', request.getHost().host, self.path, text, btype, location) try: sms = SMS() sms.send_broadcast(text, btype, location) data = {'status': 'success', 'error': ''} except SMSException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def month(self, request, year, month): api_log.info('%s - [POST] %s/month %s %s', request.getHost().host, self.path, year, month) try: credit = Credit() data = json.dumps(credit.get_month_credit(year, month), cls=PGEncoder) except CreditException as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return data
def post(self, request, msisdn, pin, balance): api_log.info('%s - [POST] %s Data: msisdn:"%s" pin:"%s" balance:"%s"', request.getHost().host, self.path, msisdn, pin, balance) try: reseller = Reseller() reseller.add(msisdn, pin, balance) data = {'status': 'success', 'error': ''} except ResellerException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def delete(self, request, msisdn): api_log.info('%s - [DELETE] %s/%s', request.getHost().host, self.path, msisdn) try: reseller = Reseller() reseller.delete(msisdn) data = {'status': 'success', 'error': ''} except ResellerException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def reseller(self, request, msisdn, amount): api_log.info('%s - [POST] %s/reseller Data: msisdn:"%s" amount:"%s"', request.getHost().host, self.path, msisdn, amount) try: credit = Credit() credit.add_to_reseller(msisdn, amount) data = {'status': 'success', 'error': ''} except CreditException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def put(self, request, msisdn='', pin='', balance=''): api_log.info('%s - [PUT] %s Data: msisdn:"%s" pin:"%s" balance:"%s"', request.getHost().host, self.path, msisdn, pin, balance) try: reseller = Reseller() if msisdn != '' and pin != '' or balance != '': reseller.edit(msisdn, pin, balance) data = {'status': 'success', 'error': ''} except ResellerException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def getAll(self, request): api_log.info('%s - [GET] %s', request.getHost().host, self.path) if (request.getHeader('Origin') and request.getHeader('Origin').find("8080") > -1): request.setHeader('Access-Control-Allow-Origin', '*') try: sub = Subscriber() data = json.dumps(sub.get_all(), cls=PGEncoder) except SubscriberException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def extension(self, request, imsi): api_log.info('%s - [GET] %s/%s', request.getHost().host, self.path, imsi) if request.getHeader('Origin').find("8080") > -1: request.setHeader('Access-Control-Allow-Origin', '*') try: sub = Subscriber() data = json.dumps(sub.get_local_extension(imsi), cls=PGEncoder) except SubscriberException as e: data = {'status': 'failed', 'error': str(e)} api_log.debug(data) return data
def get(self, request, msisdn): api_log.info('%s - [GET] %s/%s', request.getHost().host, self.path, msisdn) try: reseller = Reseller() if msisdn == 'messages': data = json.dumps(reseller.get_messages(), cls=PGEncoder) else: data = json.dumps(reseller.get(msisdn), cls=PGEncoder) except ResellerException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def get_sip_connected(self): try: _sip_connected = [] con = ESLconnection("127.0.0.1", "8021", "ClueCon") e = con.api("show registrations") reg = e.getBody() lines = reg.split('\n') for line in lines[1:]: vals = line.split(',') if len(vals) < 10: return _sip_connected _sip_connected.append([vals[0]]) except Exception as ex: api_log.info('Exception: %s' % ex)
def put(self, request, mess1, mess2, mess3, mess4, mess5, mess6): api_log.info( '%s - [PUT] %s/edit_messages Data: mess1:"%s" mess2:"%s" mess3:"%s" mess4:"%s" mess5:"%s" mess6:"%s"', request.getHost().host, self.path, mess1, mess2, mess3, mess4, mess5, mess6) try: reseller = Reseller() reseller.edit_messages(mess1, mess2, mess3, mess4, mess5, mess6) data = {'status': 'success', 'error': ''} except ResellerException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def receive(self, request, source, destination, charset, coding, text): try: sms = SMS() import threading thread = threading.Thread(target=sms.receive, args=(source, destination, text, charset, coding)) thread.daemon = True api_log.info('Starting thread for chat message to %s via %s', destination, request.getClientIP()) thread.start() data = {'status': 'success', 'error': ''} api_log.debug(data) return data except Exception as e: api_log.error("Chat handler exception %s", e, exc_info=True)
def post(self, request, msisdn, name, balance, location, equipment, package): api_log.info( '%s - [POST] %s Data: msisdn:"%s" name:"%s" balance:"%s" location:"%s equipment:"%s" package: "%s"', request.getHost().host, self.path, msisdn, name, balance, location, equipment, package) try: sub = Subscriber() num = sub.add(msisdn, name, balance, location, equipment, package) if num != msisdn: data = {'status': 'success', 'error': num} else: data = {'status': 'success', 'error': ''} except SubscriberException as e: data = {'status': 'failed', 'error': str(e)} api_log.info(data) return data
def monitor_feed(self, request): api_log.info('%s - [GET] %s/feed', request.getHost().host, self.path) if request.getClientIP().find("10.23") > -1: request.setHeader('Access-Control-Allow-Origin', '*') else: return '' try: stats = LiveStatistics() data = json.dumps(stats.monitor_feed(), cls=PGEncoder) except StatisticException as e: data = {'status': 'failed', 'error': str(e)} except psycopg2.InterfaceError as e: if str(e) == "connection already closed": api_log.debug("Exiting due to DB Error: %s", e) os._exit(-1) api_log.debug(data) return data
def get(self, request, msisdn): api_log.info('%s - [GET] %s/%s', request.getHost().host, self.path, msisdn) try: sub = Subscriber() if msisdn == 'all_connected': data = json.dumps(sub.get_all_connected(), cls=PGEncoder) elif msisdn == 'all_sip': data = json.dumps(sub.get_sip_connected()) elif msisdn == 'unpaid_subscription': data = json.dumps(sub.get_unpaid_subscription(), cls=PGEncoder) elif msisdn == 'paid_subscription': data = json.dumps(sub.get_paid_subscription(), cls=PGEncoder) elif msisdn == 'unauthorized': data = json.dumps(sub.get_unauthorized(), cls=PGEncoder) elif msisdn == 'online': data = json.dumps(sub.get_online(), cls=PGEncoder) elif msisdn == 'offline': data = json.dumps(sub.get_offline(), cls=PGEncoder) elif msisdn == 'all_roaming': data = json.dumps(sub.get_roaming(), cls=PGEncoder) elif msisdn == 'all_foreign': if request.getClientIP().find("10.23") > -1: request.setHeader('Access-Control-Allow-Origin', '*') data = json.dumps(sub.get_all_foreign(), cls=PGEncoder) else: data = json.dumps(sub.get(msisdn), cls=PGEncoder) except SubscriberException as e: data = {'status': 'failed', 'error': str(e)} if msisdn != 'all_connected': api_log.info(data) else: api_log.debug(data) return data