41ab91259d
Inherit from object in all Python classes. This is a "new style" class. It's best to always use them. In Python 3, all classes are "new style", so this ensures consistent behavior between 2 and 3. Change-Id: I958baf19a076a6cf3cc57455f05d24182ac1f005 Signed-off-by: Russell Bryant <rbryant@redhat.com>
94 lines
4.0 KiB
Python
94 lines
4.0 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
import logging
|
|
import subprocess
|
|
|
|
|
|
class Grafana(object):
|
|
|
|
def __init__(self, config):
|
|
self.logger = logging.getLogger('browbeat.Grafana')
|
|
self.config = config
|
|
self.cloud_name = self.config['browbeat']['cloud_name']
|
|
self.hosts_file = self.config['ansible']['hosts']
|
|
self.grafana_ip = self.config['grafana']['grafana_ip']
|
|
self.grafana_port = self.config['grafana']['grafana_port']
|
|
self.playbook = self.config['ansible']['grafana_snapshot']
|
|
self.grafana_url = {}
|
|
|
|
def extra_vars(self, from_ts, to_ts, result_dir, test_name):
|
|
extra_vars = 'grafana_ip={} '.format(
|
|
self.config['grafana']['grafana_ip'])
|
|
extra_vars += 'grafana_port={} '.format(
|
|
self.config['grafana']['grafana_port'])
|
|
extra_vars += 'from={} '.format(from_ts)
|
|
extra_vars += 'to={} '.format(to_ts)
|
|
extra_vars += 'results_dir={}/{} '.format(result_dir, test_name)
|
|
extra_vars += 'var_cloud={} '.format(self.cloud_name)
|
|
if self.config['grafana']['snapshot']['snapshot_compute']:
|
|
extra_vars += 'snapshot_compute=true '
|
|
return extra_vars
|
|
|
|
def grafana_urls(self):
|
|
return self.grafana_url
|
|
|
|
def create_grafana_urls(self, time):
|
|
if 'grafana' in self.config and self.config['grafana']['enabled']:
|
|
from_ts = time['from_ts']
|
|
to_ts = time['to_ts']
|
|
url = 'http://{}:{}/dashboard/db/'.format(
|
|
self.grafana_ip, self.grafana_port)
|
|
for dashboard in self.config['grafana']['dashboards']:
|
|
self.grafana_url[dashboard] = '{}{}?from={}&to={}&var-Cloud={}'.format(
|
|
url,
|
|
dashboard,
|
|
from_ts,
|
|
to_ts,
|
|
self.cloud_name)
|
|
|
|
def print_dashboard_url(self, test_name):
|
|
for dashboard in self.grafana_url:
|
|
self.logger.info(
|
|
'{} - Grafana Dashboard {} URL: {}'.format(
|
|
test_name,
|
|
dashboard,
|
|
self.grafana_url[dashboard]))
|
|
|
|
def log_snapshot_playbook_cmd(self, from_ts, to_ts, result_dir, test_name):
|
|
if 'grafana' in self.config and self.config['grafana']['enabled']:
|
|
extra_vars = self.extra_vars(
|
|
from_ts, to_ts, result_dir, test_name)
|
|
snapshot_cmd = 'ansible-playbook -i {} {} -e "{}"'.format(
|
|
self.hosts_file, self.playbook, extra_vars)
|
|
self.logger.info('Snapshot command: {}'.format(snapshot_cmd))
|
|
|
|
def run_playbook(self, from_ts, to_ts, result_dir, test_name):
|
|
if 'grafana' in self.config and self.config['grafana']['enabled']:
|
|
if self.config['grafana']['snapshot']['enabled']:
|
|
extra_vars = self.extra_vars(
|
|
from_ts, to_ts, result_dir, test_name)
|
|
subprocess_cmd = [
|
|
'ansible-playbook',
|
|
'-i',
|
|
self.hosts_file,
|
|
self.playbook,
|
|
'-e',
|
|
'{}'.format(extra_vars)]
|
|
snapshot_log = open('{}/snapshot.log'.format(result_dir), 'a+')
|
|
self.logger.info(
|
|
'Running ansible to create snapshots for: {}'.format(test_name))
|
|
subprocess.Popen(
|
|
subprocess_cmd,
|
|
stdout=snapshot_log,
|
|
stderr=subprocess.STDOUT)
|