本文整理汇总了Python中singer.metrics方法的典型用法代码示例。如果您正苦于以下问题:Python singer.metrics方法的具体用法?Python singer.metrics怎么用?Python singer.metrics使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类singer
的用法示例。
在下文中一共展示了singer.metrics方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _sync_contacts_by_company
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def _sync_contacts_by_company(STATE, ctx, company_id):
schema = load_schema(CONTACTS_BY_COMPANY)
catalog = ctx.get_catalog_from_id(singer.get_currently_syncing(STATE))
mdata = metadata.to_map(catalog.get('metadata'))
url = get_url("contacts_by_company", company_id=company_id)
path = 'vids'
with Transformer(UNIX_MILLISECONDS_INTEGER_DATETIME_PARSING) as bumble_bee:
with metrics.record_counter(CONTACTS_BY_COMPANY) as counter:
data = request(url, default_contacts_by_company_params).json()
for row in data[path]:
counter.increment()
record = {'company-id' : company_id,
'contact-id' : row}
record = bumble_bee.transform(lift_properties_and_versions(record), schema, mdata)
singer.write_record("contacts_by_company", record, time_extracted=utils.now())
return STATE
示例2: __iter__
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def __iter__(self):
for params in self.job_params():
with metrics.job_timer('insights'):
job = self.run_job(params)
min_date_start_for_job = None
count = 0
for obj in job.get_result():
count += 1
rec = obj.export_all_data()
if not min_date_start_for_job or rec['date_stop'] < min_date_start_for_job:
min_date_start_for_job = rec['date_stop']
yield {'record': rec}
LOGGER.info('Got %d results for insights job', count)
# when min_date_start_for_job stays None, we should
# still update the bookmark using 'until' in time_ranges
if min_date_start_for_job is None:
for time_range in params['time_ranges']:
if time_range['until']:
min_date_start_for_job = time_range['until']
yield {'state': advance_bookmark(self, self.bookmark_key,
min_date_start_for_job)} # pylint: disable=no-member
示例3: get_all_team_members
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def get_all_team_members(team_slug, schemas, repo_path, state, mdata):
org = repo_path.split('/')[0]
with metrics.record_counter('team_members') as counter:
for response in authed_get_all_pages(
'team_members',
'https://api.github.com/orgs/{}/teams/{}/members?sort=created_at&direction=desc'.format(org, team_slug)
):
team_members = response.json()
for r in team_members:
r['_sdc_repository'] = repo_path
# transform and write release record
with singer.Transformer() as transformer:
rec = transformer.transform(r, schemas, metadata=metadata.to_map(mdata))
counter.increment()
yield rec
return state
示例4: get_all_team_memberships
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def get_all_team_memberships(team_slug, schemas, repo_path, state, mdata):
org = repo_path.split('/')[0]
for response in authed_get_all_pages(
'team_members',
'https://api.github.com/orgs/{}/teams/{}/members?sort=created_at&direction=desc'.format(org, team_slug)
):
team_members = response.json()
with metrics.record_counter('team_memberships') as counter:
for r in team_members:
username = r['login']
for res in authed_get_all_pages(
'memberships',
'https://api.github.com/orgs/{}/teams/{}/memberships/{}'.format(org, team_slug, username)
):
team_membership = res.json()
team_membership['_sdc_repository'] = repo_path
with singer.Transformer() as transformer:
rec = transformer.transform(team_membership, schemas, metadata=metadata.to_map(mdata))
counter.increment()
yield rec
return state
示例5: get_all_issue_labels
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def get_all_issue_labels(schemas, repo_path, state, mdata):
# https://developer.github.com/v3/issues/labels/
# not sure if incremental key
# 'https://api.github.com/repos/{}/labels?sort=created_at&direction=desc'.format(repo_path)
with metrics.record_counter('issue_labels') as counter:
for response in authed_get_all_pages(
'issue_labels',
'https://api.github.com/repos/{}/labels'.format(repo_path)
):
issue_labels = response.json()
extraction_time = singer.utils.now()
for r in issue_labels:
r['_sdc_repository'] = repo_path
# transform and write release record
with singer.Transformer() as transformer:
rec = transformer.transform(r, schemas, metadata=metadata.to_map(mdata))
singer.write_record('issue_labels', rec, time_extracted=extraction_time)
singer.write_bookmark(state, repo_path, 'issue_labels', {'since': singer.utils.strftime(extraction_time)})
counter.increment()
return state
示例6: get_all_assignees
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def get_all_assignees(schema, repo_path, state, mdata):
'''
https://developer.github.com/v3/issues/assignees/#list-assignees
'''
with metrics.record_counter('assignees') as counter:
for response in authed_get_all_pages(
'assignees',
'https://api.github.com/repos/{}/assignees'.format(repo_path)
):
assignees = response.json()
extraction_time = singer.utils.now()
for assignee in assignees:
assignee['_sdc_repository'] = repo_path
with singer.Transformer() as transformer:
rec = transformer.transform(assignee, schema, metadata=metadata.to_map(mdata))
singer.write_record('assignees', rec, time_extracted=extraction_time)
singer.write_bookmark(state, repo_path, 'assignees', {'since': singer.utils.strftime(extraction_time)})
counter.increment()
return state
示例7: get_all_collaborators
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def get_all_collaborators(schema, repo_path, state, mdata):
'''
https://developer.github.com/v3/repos/collaborators/#list-collaborators
'''
with metrics.record_counter('collaborators') as counter:
for response in authed_get_all_pages(
'collaborators',
'https://api.github.com/repos/{}/collaborators'.format(repo_path)
):
collaborators = response.json()
extraction_time = singer.utils.now()
for collaborator in collaborators:
collaborator['_sdc_repository'] = repo_path
with singer.Transformer() as transformer:
rec = transformer.transform(collaborator, schema, metadata=metadata.to_map(mdata))
singer.write_record('collaborators', rec, time_extracted=extraction_time)
singer.write_bookmark(state, repo_path, 'collaborator', {'since': singer.utils.strftime(extraction_time)})
counter.increment()
return state
示例8: request
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def request(url, params=None):
params = params or {}
hapikey = CONFIG['hapikey']
if hapikey is None:
if CONFIG['token_expires'] is None or CONFIG['token_expires'] < datetime.datetime.utcnow():
acquire_access_token_from_refresh_token()
headers = {'Authorization': 'Bearer {}'.format(CONFIG['access_token'])}
else:
params['hapikey'] = hapikey
headers = {}
if 'user_agent' in CONFIG:
headers['User-Agent'] = CONFIG['user_agent']
req = requests.Request('GET', url, params=params, headers=headers).prepare()
LOGGER.info("GET %s", req.url)
with metrics.http_request_timer(parse_source_from_url(url)) as timer:
resp = SESSION.send(req)
timer.tags[metrics.Tag.http_status_code] = resp.status_code
if resp.status_code == 403:
raise SourceUnavailableException(resp.content)
else:
resp.raise_for_status()
return resp
# {"bookmarks" : {"contacts" : { "lastmodifieddate" : "2001-01-01"
# "offset" : {"vidOffset": 1234
# "timeOffset": "3434434 }}
# "users" : { "timestamp" : "2001-01-01"}}
# "currently_syncing" : "contacts"
# }
# }
示例9: gen_request
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def gen_request(STATE, tap_stream_id, url, params, path, more_key, offset_keys, offset_targets):
if len(offset_keys) != len(offset_targets):
raise ValueError("Number of offset_keys must match number of offset_targets")
if singer.get_offset(STATE, tap_stream_id):
params.update(singer.get_offset(STATE, tap_stream_id))
with metrics.record_counter(tap_stream_id) as counter:
while True:
data = request(url, params).json()
for row in data[path]:
counter.increment()
yield row
if not data.get(more_key, False):
break
STATE = singer.clear_offset(STATE, tap_stream_id)
for key, target in zip(offset_keys, offset_targets):
if key in data:
params[target] = data[key]
STATE = singer.set_offset(STATE, tap_stream_id, target, data[key])
singer.write_state(STATE)
STATE = singer.clear_offset(STATE, tap_stream_id)
singer.write_state(STATE)
示例10: do_sync
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def do_sync(account, catalog, state):
streams_to_sync = get_streams_to_sync(account, catalog, state)
refs = load_shared_schema_refs()
for stream in streams_to_sync:
LOGGER.info('Syncing %s, fields %s', stream.name, stream.fields())
schema = singer.resolve_schema_references(load_schema(stream), refs)
metadata_map = metadata.to_map(stream.catalog_entry.metadata)
bookmark_key = BOOKMARK_KEYS.get(stream.name)
singer.write_schema(stream.name, schema, stream.key_properties, bookmark_key, stream.stream_alias)
# NB: The AdCreative stream is not an iterator
if stream.name == 'adcreative':
stream.sync()
continue
with Transformer(pre_hook=transform_date_hook) as transformer:
with metrics.record_counter(stream.name) as counter:
for message in stream:
if 'record' in message:
counter.increment()
time_extracted = utils.now()
record = transformer.transform(message['record'], schema, metadata=metadata_map)
singer.write_record(stream.name, record, stream.stream_alias, time_extracted)
elif 'state' in message:
singer.write_state(message['state'])
else:
raise TapFacebookException('Unrecognized message {}'.format(message))
示例11: sync_non_binlog_streams
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def sync_non_binlog_streams(mysql_conn, non_binlog_catalog, config, state):
for catalog_entry in non_binlog_catalog.streams:
columns = list(catalog_entry.schema.properties.keys())
if not columns:
LOGGER.warning('There are no columns selected for stream %s, skipping it.', catalog_entry.stream)
continue
state = singer.set_currently_syncing(state, catalog_entry.tap_stream_id)
# Emit a state message to indicate that we've started this stream
singer.write_message(singer.StateMessage(value=copy.deepcopy(state)))
md_map = metadata.to_map(catalog_entry.metadata)
replication_method = md_map.get((), {}).get('replication-method')
database_name = common.get_database_name(catalog_entry)
with metrics.job_timer('sync_table') as timer:
timer.tags['database'] = database_name
timer.tags['table'] = catalog_entry.table
log_engine(mysql_conn, catalog_entry)
if replication_method == 'INCREMENTAL':
optional_limit = config.get('incremental_limit')
do_sync_incremental(mysql_conn, catalog_entry, state, columns, optional_limit)
elif replication_method == 'LOG_BASED':
do_sync_historical_binlog(mysql_conn, config, catalog_entry, state, columns)
elif replication_method == 'FULL_TABLE':
do_sync_full_table(mysql_conn, config, catalog_entry, state, columns)
else:
raise Exception("only INCREMENTAL, LOG_BASED, and FULL TABLE replication methods are supported")
state = singer.set_currently_syncing(state, None)
singer.write_message(singer.StateMessage(value=copy.deepcopy(state)))
示例12: sync_binlog_streams
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def sync_binlog_streams(mysql_conn, binlog_catalog, config, state):
if binlog_catalog.streams:
for stream in binlog_catalog.streams:
write_schema_message(stream)
with metrics.job_timer('sync_binlog') as timer:
binlog.sync_binlog_stream(mysql_conn, config, binlog_catalog.streams, state)
示例13: authed_get
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def authed_get(source, url, headers={}):
with metrics.http_request_timer(source) as timer:
session.headers.update(headers)
resp = session.request(method='get', url=url)
if resp.status_code == 401:
raise AuthException(resp.text)
if resp.status_code == 403:
raise AuthException(resp.text)
if resp.status_code == 404:
raise NotFoundException(resp.text)
timer.tags[metrics.Tag.http_status_code] = resp.status_code
return resp
示例14: get_all_teams
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def get_all_teams(schemas, repo_path, state, mdata):
org = repo_path.split('/')[0]
with metrics.record_counter('teams') as counter:
for response in authed_get_all_pages(
'teams',
'https://api.github.com/orgs/{}/teams?sort=created_at&direction=desc'.format(org)
):
teams = response.json()
extraction_time = singer.utils.now()
for r in teams:
r['_sdc_repository'] = repo_path
# transform and write release record
with singer.Transformer() as transformer:
rec = transformer.transform(r, schemas, metadata=metadata.to_map(mdata))
singer.write_record('teams', rec, time_extracted=extraction_time)
singer.write_bookmark(state, repo_path, 'teams', {'since': singer.utils.strftime(extraction_time)})
counter.increment()
if schemas.get('team_members'):
team_slug = r['slug']
for team_members_rec in get_all_team_members(team_slug, schemas['team_members'], repo_path, state, mdata):
singer.write_record('team_members', team_members_rec, time_extracted=extraction_time)
singer.write_bookmark(state, repo_path, 'team_members', {'since': singer.utils.strftime(extraction_time)})
if schemas.get('team_memberships'):
team_slug = r['slug']
for team_memberships_rec in get_all_team_memberships(team_slug, schemas['team_memberships'], repo_path, state, mdata):
singer.write_record('team_memberships', team_memberships_rec, time_extracted=extraction_time)
return state
示例15: get_all_events
# 需要导入模块: import singer [as 别名]
# 或者: from singer import metrics [as 别名]
def get_all_events(schemas, repo_path, state, mdata):
# Incremental sync off `created_at`
# https://developer.github.com/v3/issues/events/#list-events-for-a-repository
# 'https://api.github.com/repos/{}/issues/events?sort=created_at&direction=desc'.format(repo_path)
bookmark_value = get_bookmark(state, repo_path, "events", "since")
if bookmark_value:
bookmark_time = singer.utils.strptime_to_utc(bookmark_value)
else:
bookmark_time = 0
with metrics.record_counter('events') as counter:
for response in authed_get_all_pages(
'events',
'https://api.github.com/repos/{}/events?sort=created_at&direction=desc'.format(repo_path)
):
events = response.json()
extraction_time = singer.utils.now()
for r in events:
r['_sdc_repository'] = repo_path
# skip records that haven't been updated since the last run
# the GitHub API doesn't currently allow a ?since param for pulls
# once we find the first piece of old data we can return, thanks to
# the sorting
updated_at = r.get('created_at') if r.get('updated_at') is None else r.get('updated_at')
if bookmark_time and singer.utils.strptime_to_utc(updated_at) < bookmark_time:
return state
# transform and write release record
with singer.Transformer() as transformer:
rec = transformer.transform(r, schemas, metadata=metadata.to_map(mdata))
singer.write_record('events', rec, time_extracted=extraction_time)
singer.write_bookmark(state, repo_path, 'events', {'since': singer.utils.strftime(extraction_time)})
counter.increment()
return state