| Index: perf_insights/perf_insights/endpoints/corpus_cleanup.py
|
| diff --git a/perf_insights/perf_insights/endpoints/corpus_cleanup.py b/perf_insights/perf_insights/endpoints/corpus_cleanup.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4895a63bc275268015844b3a2f2dd22efd119b1a
|
| --- /dev/null
|
| +++ b/perf_insights/perf_insights/endpoints/corpus_cleanup.py
|
| @@ -0,0 +1,56 @@
|
| +# 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 datetime
|
| +import logging
|
| +import time
|
| +import webapp2
|
| +
|
| +from perf_insights import cloud_config
|
| +from perf_insights.endpoints.cloud_mapper.cloud_helper import \
|
| + default_retry_params
|
| +from perf_insights.trace_info import TraceInfo
|
| +import third_party.cloudstorage as gcs
|
| +
|
| +BATCH_SIZE=100
|
| +MAX_DAYS=30
|
| +
|
| +class CorpusCleanupPage(webapp2.RequestHandler):
|
| +
|
| + def _delete_traces(self):
|
| + trace_bucket = cloud_config.Get().trace_upload_bucket
|
| + deleted_traces = 0;
|
| +
|
| + oldest_time = datetime.datetime.now() - datetime.timedelta(days=MAX_DAYS)
|
| + q = TraceInfo.query(TraceInfo.date < oldest_time)
|
| +
|
| + for key in q.fetch(BATCH_SIZE, keys_only=True):
|
| + gcs_path = '/%s/%s.gz' % (trace_bucket, key.id())
|
| + try:
|
| + gcs.delete(gcs_path, retry_params=default_retry_params)
|
| + except gcs.NotFoundError:
|
| + pass
|
| +
|
| + key.delete()
|
| + deleted_traces += 1
|
| +
|
| + return deleted_traces
|
| +
|
| + def get(self):
|
| + self.response.out.write('<html><body>')
|
| +
|
| + while True:
|
| + deleted_traces = self._delete_traces();
|
| + self.response.out.write("<br><div><bold>Traces Cleaned:</bold> %s</div>"
|
| + % deleted_traces)
|
| +
|
| + logging.info('Daily cleanup deleted %s traces.' % deleted_traces)
|
| +
|
| + if deleted_traces < BATCH_SIZE:
|
| + break
|
| +
|
| + self.response.out.write('</body></html>')
|
| +
|
| +
|
| +app = webapp2.WSGIApplication([('/corpus_cleanup', CorpusCleanupPage)])
|
|
|