metrics: provide dashboard revision walking function and cache patterns.

This commit is contained in:
Jimmy Berry 2018-04-20 16:30:27 -05:00
parent 079eda3ba6
commit 4ee96ae3d2

View File

@ -14,6 +14,7 @@ import yaml
import metrics_release import metrics_release
import osc.conf import osc.conf
import osc.core import osc.core
from osc.core import get_commitlog
import osclib.conf import osclib.conf
from osclib.cache import Cache from osclib.cache import Cache
from osclib.conf import Config from osclib.conf import Config
@ -347,6 +348,51 @@ def ingest_release_schedule(project):
client.write_points(points, 's') client.write_points(points, 's')
return len(points) return len(points)
def revision_index(api):
if not hasattr(revision_index, 'index'):
root = ET.fromstring(''.join(
get_commitlog(api.apiurl, api.cstaging, 'dashboard', None, format='xml')))
revision_index.index = {}
for logentry in root.findall('logentry'):
date = date_parse(logentry.find('date').text)
revision_index.index[date] = logentry.get('revision')
return revision_index.index
def revision_at(api, datetime):
index = revision_index(api)
for made, revision in sorted(index.items(), reverse=True):
if made <= datetime:
return revision
return None
def dashboard_at(api, filename, datetime=None, revision=None):
if datetime:
revision = revision_at(api, datetime)
if not revision:
return revision
content = api.dashboard_content_load(filename, revision)
if filename in ('ignored_requests'):
if content:
return yaml.safe_load(content)
return {}
elif filename in ('config'):
if content:
# TODO re-use from osclib.conf.
from ConfigParser import ConfigParser
import io
cp = ConfigParser()
config = '[remote]\n' + content
cp.readfp(io.BytesIO(config))
return dict(cp.items('remote'))
return {}
return content
def main(args): def main(args):
global client global client
client = InfluxDBClient(args.host, args.port, args.user, args.password, args.project) client = InfluxDBClient(args.host, args.port, args.user, args.password, args.project)
@ -367,6 +413,8 @@ def main(args):
Cache.delete_all() Cache.delete_all()
if args.heavy_cache: if args.heavy_cache:
Cache.PATTERNS['/search/request'] = sys.maxint Cache.PATTERNS['/search/request'] = sys.maxint
Cache.PATTERNS['/source/[^/]+/dashboard/_history'] = sys.maxint
Cache.PATTERNS['/source/[^/]+/dashboard/[^/]+\?rev=.*'] = sys.maxint
Cache.init() Cache.init()
Config(args.project) Config(args.project)