Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(364)

Unified Diff: infra_libs/event_mon/config.py

Issue 2213143002: Add infra_libs as a bootstrap dependency. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Removed the ugly import hack Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: infra_libs/event_mon/config.py
diff --git a/infra_libs/event_mon/config.py b/infra_libs/event_mon/config.py
deleted file mode 100644
index e91545668922fcd1d3498a7c76489d2b8f6dc8b9..0000000000000000000000000000000000000000
--- a/infra_libs/event_mon/config.py
+++ /dev/null
@@ -1,230 +0,0 @@
-# Copyright 2015 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import logging
-import os
-import socket
-
-import infra_libs
-from infra_libs.event_mon.protos.chrome_infra_log_pb2 import (
- ChromeInfraEvent, ServiceEvent)
-from infra_libs.event_mon import router as ev_router
-
-DEFAULT_SERVICE_ACCOUNT_CREDS = 'service-account-event-mon.json'
-RUNTYPES = set(('dry', 'test', 'prod', 'file'))
-
-# Remote endpoints
-ENDPOINTS = {
- 'test': 'https://jmt17.google.com/log',
- 'prod': 'https://play.googleapis.com/log',
-}
-
-# Instance of router._Router (singleton)
-_router = None
-
-# Cache some generally useful values / options
-_cache = {}
-
-
-def add_argparse_options(parser):
- # The default values should make sense for local testing, not production.
- group = parser.add_argument_group('Event monitoring (event_mon) '
- 'global options')
- group.add_argument('--dry-run', default=False,
- action='store_true',
- help='When passed, just print what would happen, but '
- 'do not do it.'
- )
- group.add_argument('--event-mon-run-type', default='dry',
- choices=RUNTYPES,
- help='Determine how to send data. "dry" does not send\n'
- 'anything. "test" sends to the test endpoint, \n'
- '"prod" to the actual production endpoint, and "file" \n'
- 'writes to a file.')
- group.add_argument('--event-mon-output-file', default='event_mon.output',
- help='File into which LogEventLite serialized protos are\n'
- 'written when --event-mon-run-type is "file"')
- group.add_argument('--event-mon-service-name',
- help='Service name to use in log events.')
- group.add_argument('--event-mon-hostname',
- help='Hostname to use in log events.')
- group.add_argument('--event-mon-appengine-name',
- help='App name to use in log events.')
- group.add_argument('--event-mon-service-account-creds',
- default=DEFAULT_SERVICE_ACCOUNT_CREDS,
- metavar='JSON_FILE',
- help="Path to a json file containing a service account's"
- "\ncredentials. This is relative to the path specified\n"
- "in --event-mon-service-accounts-creds-root\n"
- "Defaults to '%(default)s'")
- group.add_argument('--event-mon-service-accounts-creds-root',
- metavar='DIR',
- default=infra_libs.SERVICE_ACCOUNTS_CREDS_ROOT,
- help="Directory containing service accounts credentials.\n"
- "Defaults to %(default)s"
- )
- group.add_argument('--event-mon-http-timeout', default=10, type=int,
- help='Timeout in seconds for HTTP requests to send events')
- group.add_argument('--event-mon-http-retry-backoff', default=2., type=float,
- help='Time in seconds before retrying POSTing to the HTTP '
- 'endpoint. Randomized exponential backoff is applied on '
- 'subsequent retries.')
-
-
-def process_argparse_options(args): # pragma: no cover
- """Initializes event monitoring based on provided arguments.
-
- Args:
- args(argparse.Namespace): output of ArgumentParser.parse_args.
- """
- setup_monitoring(
- run_type=args.event_mon_run_type,
- hostname=args.event_mon_hostname,
- service_name=args.event_mon_service_name,
- appengine_name=args.event_mon_appengine_name,
- service_account_creds=args.event_mon_service_account_creds,
- service_accounts_creds_root=args.event_mon_service_accounts_creds_root,
- output_file=args.event_mon_output_file,
- dry_run=args.dry_run,
- http_timeout=args.event_mon_http_timeout,
- http_retry_backoff=args.event_mon_http_retry_backoff
- )
-
-
-def setup_monitoring(run_type='dry',
- hostname=None,
- service_name=None,
- appengine_name=None,
- service_account_creds=None,
- service_accounts_creds_root=None,
- output_file=None,
- dry_run=False,
- http_timeout=10,
- http_retry_backoff=2.):
- """Initializes event monitoring.
-
- This function is mainly used to provide default global values which are
- required for the module to work.
-
- If you're implementing a command-line tool, use process_argparse_options
- instead.
-
- Args:
- run_type (str): One of 'dry', 'test', or 'prod'. Do respectively nothing,
- hit the testing endpoint and the production endpoint.
-
- hostname (str): hostname as it should appear in the event. If not provided
- a default value is computed.
-
- service_name (str): logical name of the service that emits events. e.g.
- "commit_queue".
-
- appengine_name (str): name of the appengine app, if running on appengine.
-
- service_account_creds (str): path to a json file containing a service
- account's credentials obtained from a Google Cloud project. **Path is
- relative to service_account_creds_root**, which is not the current path by
- default. See infra_libs.authentication for details.
-
- service_account_creds_root (str): path containing credentials files.
-
- output_file (str): file where to write the output in run_type == 'file'
- mode.
-
- dry_run (bool): if True, the code has no side-effect, what would have been
- done is printed instead.
-
- http_timeout (int): timeout in seconds for HTTP requests to send events.
-
- http_retry_backoff (float): time in seconds before retrying POSTing to the
- HTTP endpoint. Randomized exponential backoff is applied on subsequent
- retries.
- """
- global _router
- logging.debug('event_mon: setting up monitoring.')
-
- if not _router:
- default_event = ChromeInfraEvent()
-
- hostname = hostname or socket.getfqdn()
- # hostname might be empty string or None on some systems, who knows.
- if hostname: # pragma: no branch
- default_event.event_source.host_name = hostname
- else: # pragma: no cover
- logging.warning('event_mon: unable to determine hostname.')
-
- if service_name:
- default_event.event_source.service_name = service_name
- if appengine_name:
- default_event.event_source.appengine_name = appengine_name
-
- _cache['default_event'] = default_event
- if run_type in ('prod', 'test'):
- _cache['service_account_creds'] = service_account_creds
- _cache['service_accounts_creds_root'] = service_accounts_creds_root
- else:
- _cache['service_account_creds'] = None
- _cache['service_accounts_creds_root'] = None
-
- if run_type not in RUNTYPES:
- logging.error('Unknown run_type (%s). Setting to "dry"', run_type)
- run_type = 'dry'
-
- if run_type == 'dry':
- # If we are running on AppEngine or devserver, use logging module.
- server_software = os.environ.get('SERVER_SOFTWARE', '')
- if (server_software.startswith('Google App Engine') or
- server_software.startswith('Development')):
- _router = ev_router._LoggingStreamRouter()
- else:
- _router = ev_router._TextStreamRouter()
- elif run_type == 'file':
- _router = ev_router._LocalFileRouter(output_file,
- dry_run=dry_run)
- else:
- _router = ev_router._HttpRouter(_cache,
- ENDPOINTS.get(run_type),
- dry_run=dry_run,
- timeout=http_timeout,
- retry_backoff=http_retry_backoff)
-
-
-def get_default_event():
- """Returns a copy of the default event."""
-
- # We return a copy here to tell people not to modify the event directly.
- ret = ChromeInfraEvent()
- ret.CopyFrom(_cache['default_event'])
- return ret
-
-
-def set_default_event(event):
- """Change the default ChromeInfraEvent used to compute all events.
-
- Args:
- event (ChromeInfraEvent): default event
- """
- # Here we raise an exception because failing to set the default event
- # could lead to invalid data in the database.
- if not isinstance(event, ChromeInfraEvent):
- msg = ('A ChromeInfraEvent is required as the default event. Got %s' %
- type(event))
- logging.error(msg)
- raise TypeError(msg)
-
- _cache['default_event'] = event
-
-
-def close():
- """Reset the state.
-
- Call this right before exiting the program.
-
- Returns:
- success (bool): False if an error occured
- """
- global _router, _cache
- _router = None
- _cache = {}
- return True

Powered by Google App Engine
This is Rietveld 408576698