def main(argv): """Sends usage reports to Google Service Control for all users.""" if len(argv) != 2: print('Usage: python -m impl.step_6_report_usage.report <service_name>') return service_name = argv[1] service = build('servicecontrol', 'v1') database = JsonDatabase() for customer_id, customer in database.items(): for product_id, product in customer['products'].items(): if 'consumer_id' not in product: continue end_time = datetime.datetime.utcnow().strftime(TIME_FORMAT) start_time = None if 'last_report_time' in product: start_time = product['last_report_time'] else: start_time = product['start_time'] metric_plan_name = product['plan_id'].replace('-', '_') operation = { 'operationId': str(uuid.uuid4()), 'operationName': 'Codelab Usage Report', 'consumerId': product['consumer_id'], 'startTime': start_time, 'endTime': end_time, 'metricValueSets': [{ 'metricName': '%s/%s_requests' % (service_name, metric_plan_name), 'metricValues': [{ 'int64Value': _get_usage_for_product(), }], }], } check = service.services().check( serviceName=service_name, body={ 'operation': operation }).execute() if 'checkErrors' in check: print('Errors for user %s with product %s:' % (customer_id, product_id)) print(check['checkErrors']) ### TODO: Temporarily turn off service for the user. ### continue service.services().report( serviceName=service_name, body={ 'operations': [operation] }).execute() product['last_report_time'] = end_time database.write(customer_id, customer)
def main(argv): """Main entrypoint to the integration with the Procurement Service.""" if len(argv) < 2: print 'Usage: python -m impl.step_5_entitlement_cancel.app <project_id>' return project_id = argv[1] credentials = _get_credentials() # Construct a service for the Partner Procurement API. database = JsonDatabase() procurement = Procurement(credentials, database, project_id) # Get the subscription object in order to perform actions on it. subscriber = pubsub_v1.SubscriberClient(credentials=credentials) subscription_path = subscriber.subscription_path(project_id, PUBSUB_SUBSCRIPTION) def callback(message): """Callback for handling Cloud Pub/Sub messages.""" payload = json.loads(message.data) print 'Received message:' pprint.pprint(payload) print ack = False if 'entitlement' in payload: ack = procurement.handle_entitlement_message( payload['entitlement'], payload['eventType']) elif 'account' in payload: ack = procurement.handle_account_message(payload['account']) else: # If there's no account or entitlement, then just ack and ignore the # message. This should never happen. ack = True if ack: message.ack() subscription = subscriber.subscribe(subscription_path, callback=callback) print 'Listening for messages on {}'.format(subscription_path) print 'Exit with Ctrl-\\' while True: try: subscription.result() except Exception as exception: print( 'Listening for messages on {} threw an Exception: {}.'.format( subscription_path, exception))
def main(argv): """Main entrypoint to the integration with the Procurement Service.""" if len(argv) != 1: print('Usage: python3 -m impl.step_2_account.app') return # Construct a service for the Partner Procurement API. database = JsonDatabase() procurement = Procurement(database) # Get the subscription object in order to perform actions on it. subscriber = pubsub_v1.SubscriberClient() subscription_path = subscriber.subscription_path(PROJECT_ID, PUBSUB_SUBSCRIPTION) def callback(message): """Callback for handling Cloud Pub/Sub messages.""" payload = json.loads(message.data) print('Received message:') pprint.pprint(payload) print() ack = False if 'entitlement' in payload: ack = procurement.handle_entitlement_message() elif 'account' in payload: ack = procurement.handle_account_message(payload['account']) else: # If there's no account or entitlement, then just ack and ignore the # message. This should never happen. ack = True if ack: message.ack() subscription = subscriber.subscribe(subscription_path, callback=callback) print('Listening for messages on {}'.format(subscription_path)) print('Exit with Ctrl-\\') while True: try: subscription.result() except Exception as exception: print( 'Listening for messages on {} threw an Exception: {}.'.format( subscription_path, exception))