Switch queries file to YAML

It is easier for a human to read, and by virtue of not requiring
escaped quotes, easier to copy/paste into a logstash field.

When copy/pasting, the newlines won't show up in the input field.
The '>' syntax in YAML indicates folding, which causes the newline
and indentation to be turned into a single space.

Change-Id: Ibd172fd4859c055096609f31ef09222147c34cf3
This commit is contained in:
James E. Blair 2013-09-30 08:17:38 -07:00
parent 932b42877d
commit f173f8b8b3
6 changed files with 69 additions and 59 deletions

View File

@ -9,5 +9,5 @@ channel_config=/home/mtreinish/elasticRecheck/recheckwatchbot.yaml
[gerrit]
user=treinish
host=review.openstack.org
query_file=/home/mtreinish/elasticRecheck/queries.json
query_file=/home/mtreinish/elasticRecheck/queries.yaml
key=/home/mtreinish/.ssh/id_rsa.pub

View File

@ -21,10 +21,10 @@ import urllib2
import ConfigParser
import copy
import json
import logging
import sys
import time
import yaml
logging.basicConfig()
@ -145,8 +145,8 @@ class Classifier():
def __init__(self, queries):
self.es = pyelasticsearch.ElasticSearch(self.ES_URL)
self.queries = json.loads(open(queries).read())
self.queries_json = queries
self.queries = yaml.load(open(queries).read())
self.queries_filename = queries
self.log = logging.getLogger("recheckwatchbot")
def _apply_template(self, template, values):
@ -180,7 +180,7 @@ class Classifier():
def classify(self, change_number, patch_number, comment):
"""Returns either None or a bug number"""
#Reload each time
self.queries = json.loads(open(self.queries_json).read())
self.queries = yaml.load(open(self.queries_filename).read())
#Wait till Elastic search is ready
self._wait_till_ready(change_number, patch_number, comment)
for x in self.queries:
@ -267,7 +267,7 @@ def main():
config.read(config_path)
user = config.get('gerrit', 'user', 'jogo')
host = config.get('gerrit', 'host', 'review.openstack.org')
queries = config.get('gerrit', 'query_file', 'queries.json')
queries = config.get('gerrit', 'query_file', 'queries.yaml')
key = config.get('gerrit', 'key')
classifier = Classifier(queries)
stream = Stream(user, host, key)

View File

@ -21,7 +21,7 @@ class TestClassifier(testtools.TestCase):
def setUp(self):
super(TestClassifier, self).setUp()
self.classifier = elasticRecheck.Classifier('queries.json')
self.classifier = elasticRecheck.Classifier('queries.yaml')
def test_read_qeuries_file(self):
self.assertNotEqual(self.classifier.queries, None)

View File

@ -15,9 +15,9 @@
import os
import ConfigParser
import json
from launchpadlib import launchpad
import testtools
import yaml
from elastic_recheck import elasticRecheck
@ -43,7 +43,7 @@ class TestQueries(testtools.TestCase):
lp = launchpad.Launchpad.login_anonymously('grabbing bugs',
'production',
LPCACHEDIR)
query_dict = json.loads(open(self.queries).read())
query_dict = yaml.load(open(self.queries).read())
bugs = map(lambda x: x['bug'], query_dict)
openstack_group = lp.project_groups['openstack']
openstack_projects = map(lambda project: project.name,

View File

@ -1,50 +0,0 @@
[
{
"bug": "1226337",
"query": "@message:\"NovaException: iSCSI device not found at\" AND @fields.build_status:\"FAILURE\" AND @fields.filename:\"logs/screen-n-cpu.txt\""
},
{
"bug": "1211915",
"query": "@message:\"ConnectionFailed: Connection to neutron failed: Maximum attempts reached\" AND @fields.filename:\"console.html\""
},
{
"bug": "1227915",
"query": "@message:\"already exists in volume group\" AND @fields.build_status:\"FAILURE\" AND @fields.loglevel:\"ERROR\" AND @fields.filename:\"logs/screen-c-vol.txt\""
},
{
"bug": "1217734",
"query": "@message:\"CalledProcessError: Command 'openssl' returned non-zero exit status\" AND @fields.build_status:\"FAILURE\""
},
{
"bug": "1191960",
"query": "@message:\"Exit code: 5\" AND @message:\" sudo cinder-rootwrap /etc/cinder/rootwrap.conf lvremove -f\" AND @fields.filename:\"logs/screen-c-vol.txt\" AND @fields.build_status:\"FAILURE\""
},
{
"bug": "1226791",
"query": "@message:\"KeyError: 'nova'\" AND @fields.filename:\"logs/screen-n-api.txt\" AND @fields.build_status:\"FAILURE\" AND @message:\"_describe_availability_zones_verbose\""
},
{
"bug": "1225664",
"query": "@message:\"Details: Time Limit Exceeded! (400s)while waiting for active, but we got killed.\" AND @fields.filename:\"console.html\" AND @fields.build_status:\"FAILURE\""
},
{
"bug": "1218391",
"query": "@message:\"Cannot 'createImage'\" AND @fields.filename:\"console.html\" AND @fields.build_status:\"FAILURE\""
},
{
"bug": "1223161",
"query": "@message:\"Cannot understand JSON*\" AND @fields.build_name:\"gate-tempest-devstack-vm-neutron\" AND @fields.build_status:\"FAILURE\" AND @fields.filename:\"logs/screen-n-sch.txt\""
},
{
"bug": "1229475",
"query": "@message:\"Second simultaneous read on fileno\" AND @fields.build_status:\"FAILURE\""
},
{
"bug": "1230407",
"query": "@message:\"AssertionError: State change timeout exceeded!\" AND @fields.build_status:\"FAILURE\" AND @fields.filename:\"console.html\""
},
{
"bug": "1223469",
"query": "@message:\"with code 22\" AND @fields.filename:\"logs/screen-c-vol.txt\" AND @fields.build_status:\"FAILURE\""
}
]

60
queries.yaml Normal file
View File

@ -0,0 +1,60 @@
- bug: 1226337
query: >
@message:"NovaException: iSCSI device not found at"
AND @fields.build_status:"FAILURE"
AND @fields.filename:"logs/screen-n-cpu.txt"
- bug: 1211915
query: >
@message:"ConnectionFailed: Connection to neutron failed: Maximum attempts reached"
AND @fields.filename:"console.html"
- bug: 1227915
query: >
@message:"already exists in volume group" AND @fields.build_status:"FAILURE"
AND @fields.loglevel:"ERROR"
AND @fields.filename:"logs/screen-c-vol.txt"
- bug: 1217734
query: >
@message:"CalledProcessError: Command 'openssl' returned non-zero exit status"
AND @fields.build_status:"FAILURE"
- bug: 1191960
query: >
@message:"Exit code: 5"
AND @message:" sudo cinder-rootwrap /etc/cinder/rootwrap.conf lvremove -f"
AND @fields.filename:"logs/screen-c-vol.txt"
AND @fields.build_status:"FAILURE"
- bug: 1226791
query: >
@message:"KeyError: 'nova'"
AND @fields.filename:"logs/screen-n-api.txt"
AND @fields.build_status:"FAILURE"
AND @message:"_describe_availability_zones_verbose"
- bug: 1225664
query: >
@message:"Details: Time Limit Exceeded! (400s)while waiting for active, but we got killed."
AND @fields.filename:"console.html"
AND @fields.build_status:"FAILURE"
- bug: 1218391
query: >
@message:"Cannot 'createImage'"
AND @fields.filename:"console.html"
AND @fields.build_status:"FAILURE"
- bug: 1223161
query: >
@message:"Cannot understand JSON*"
AND @fields.build_name:"gate-tempest-devstack-vm-neutron"
AND @fields.build_status:"FAILURE"
AND @fields.filename:"logs/screen-n-sch.txt"
- bug: 1229475
query: >
@message:"Second simultaneous read on fileno"
AND @fields.build_status:"FAILURE"
- bug: 1230407
query: >
@message:"AssertionError: State change timeout exceeded!"
AND @fields.build_status:"FAILURE"
AND @fields.filename:"console.html"
- bug: 1223469
query: >
@message:"with code 22"
AND @fields.filename:"logs/screen-c-vol.txt"
AND @fields.build_status:"FAILURE"