docs: def run(organization, hook_context, github_url, github_token,
          verbose, metrics=False, since=None, assume=None, region=None):
      """scan org repo status hooks"""
      logging.basicConfig(level=logging.DEBUG)
  
      since = dateparser.parse(
          since, settings={
              'RETURN_AS_TIMEZONE_AWARE': True, 'TO_TIMEZONE': 'UTC'})
  
      headers = {"Authorization": "token {}".format(github_token)}
  
      response = requests.post(
          github_url, headers=headers,
          json={'query': query, 'variables': {'organization': organization}})
  
      result = response.json()
  
      if response.status_code != 200 or 'errors' in result:
          raise Exception(
              "Query failed to run by returning code of {}. {}".format(
                  response.status_code, response.content))
  
      now = datetime.utcnow().replace(tzinfo=tzutc())
      stats = Counter()
      repo_metrics = RepoMetrics(
          Bag(session_factory=SessionFactory(region, assume_role=assume)),
          {'namespace': DEFAULT_NAMESPACE}
      )
  
      for r in result['data']['organization']['repositories']['nodes']:
          commits = jmespath.search(
              'pullRequests.edges[].node[].commits[].nodes[].commit[]', r)
          if not commits:
              continue
          log.debug("processing repo: %s prs: %d", r['name'], len(commits))
          repo_metrics.dims = {
              'Hook': hook_context,
              'Repo': '{}/{}'.format(organization, r['name'])}
  
          # Each commit represents a separate pr
          for c in commits:
              process_commit(c, r, repo_metrics, stats, since, now)
  
      repo_metrics.dims = None
  
      if stats['missing']:
          repo_metrics.put_metric(
              'RepoHookPending', stats['missing'], 'Count',
              Hook=hook_context)
          repo_metrics.put_metric(
              'RepoHookLatency', stats['missing_time'], 'Seconds',
              Hook=hook_context)
  
      if not metrics:
          print(dumps(repo_metrics.buf, indent=2))
          return
      else:
          repo_metrics.BUF_SIZE = 20
          repo_metrics.flush()