def __do_clear(self, options):
     """Deletes exsiting custom metric descriptors."""
     stackdriver = stackdriver_service.make_service(options)
     audit_results = stackdriver_descriptors.AuditResults(stackdriver)
     descriptor_list = audit_results.descriptor_map.values()
     audit_results.unused_descriptors = {
         item['type']: item
         for item in descriptor_list
     }
     stackdriver.descriptor_manager.delete_descriptors(
         descriptor_list, audit_results)
     return audit_results
    def process_web_request(self, request, path, params, fragment):
        """Implements CommandHandler."""
        options = dict(get_global_options())
        options.update(params)

        if str(params.get('clear_all')).lower() != 'true':
            stackdriver = stackdriver_service.make_service(options)
            audit_results = stackdriver_descriptors.AuditResults(stackdriver)
            descriptor_list = audit_results.descriptor_map.values()
            descriptor_html = '\n<li> '.join(item['type']
                                             for item in descriptor_list)
            html = textwrap.dedent("""\
          Clearing descriptors requires query parameter
          <code>clear_all=true</code>.
          <p/>
          Here are the {count} custom descriptors:
          <ul>
          <li>{descriptors}
          </ul>
          <p/>
          <a href="{path}?clear_all=true">Yes, delete everything!</a>
      """.format(count=len(descriptor_list),
                 descriptors=descriptor_html,
                 path=path))

            html_doc = http_server.build_html_document(
                html, title='Missing Parameters')
            request.respond(400, {'ContentType': 'text/html'}, html_doc)
            return

        audit_results = self.__do_clear(options)
        response_code = (httplib.OK if audit_results.obsoleted_count == 0 else
                         httplib.INTERNAL_SERVER_ERROR)
        headers = {'Content-Type': 'text/plain'}
        body = audit_results_to_output(audit_results,
                                       "No custom descriptors to delete.")
        request.respond(response_code, headers, body)