WORKLOADS = 'workloads'
-class PlanProp(BaseProp):
- # plan
- INFO = 'info'
-
- FACILITY = 'facility'
- ENGINEER = 'engineer'
-
- CONFIG = 'config'
-
- DRIVER = 'driver'
- COLLECTOR = 'collector'
- REPORTER = 'reporter'
-
- QPIS = 'QPIs'
-
-
-class CollectorProp(BaseProp):
- LOGS = 'logs'
- FILENAME = 'filename'
- GREP = 'grep'
- REGEX = 'regex'
- CAPTURE = 'capture'
-
-
class ReporterBaseProp(BaseProp):
TRANSFORMER = 'transformer'
##############################################################################
+from qtip.base.constant import BaseProp
+
+
class BaseCollector(object):
"""performance metrics collector"""
def __init__(self, config):
self._config = config
+
+
+class CollectorProp(BaseProp):
+ TYPE = 'type'
+ LOGS = 'logs'
+ FILENAME = 'filename'
+ GREP = 'grep'
+ REGEX = 'regex'
+ CAPTURE = 'capture'
+ PATHS = 'path'
from base import BaseCollector
-from qtip.base.constant import CollectorProp as CProp
+from qtip.collector.base import CollectorProp as CProp
from qtip.loader.file import FileLoader
class LogfileCollector(BaseCollector):
"""collect performance metrics from log files"""
- def __init__(self, config, paths=None):
+ TYPE = 'logfile'
+
+ def __init__(self, config, parent=None):
super(LogfileCollector, self).__init__(config)
+ paths = [config[CProp.PATHS]] if CProp.PATHS in config else ['.']
self.loader = FileLoader('.', paths)
+ self._parent = parent
def collect(self):
captured = {}
--- /dev/null
+##############################################################################
+# Copyright (c) 2017 ZTE Corp and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+
+from qtip.collector.logfile import LogfileCollector
+
+
+# TODO(yujunz) more elegant way to load module dynamically
+def load_collector(type_name):
+ if type_name == LogfileCollector.TYPE:
+ return LogfileCollector
+ else:
+ raise Exception("Invalid collector type: {}".format(type_name))
##############################################################################
-from qtip.base.constant import PlanProp
-from qtip.collector.logfile import LogfileCollector
+from qtip.base.constant import BaseProp
+from qtip.collector.base import CollectorProp as CProp
+from qtip.loader.module import load_collector
from qtip.loader.yaml_file import YamlFileLoader
from qtip.loader.qpi import QPISpec
def __init__(self, name, paths=None):
super(Plan, self).__init__(name, paths)
+ _config = self.content[PlanProp.CONFIG]
+
+ self.collectors = [load_collector(c[CProp.TYPE])(c, self)
+ for c in _config[PlanProp.COLLECTORS]]
+
self.qpis = [QPISpec(qpi, paths=paths)
for qpi in self.content[PlanProp.QPIS]]
- _config = self.content[PlanProp.CONFIG]
- # TODO(yujunz) create collector by name
- self.collector = LogfileCollector(_config[PlanProp.COLLECTOR], paths)
+
+class PlanProp(BaseProp):
+ # plan
+ INFO = 'info'
+
+ FACILITY = 'facility'
+ ENGINEER = 'engineer'
+
+ CONFIG = 'config'
+
+ DRIVER = 'driver'
+ COLLECTORS = 'collectors'
+ REPORTER = 'reporter'
+
+ QPIS = 'QPIs'
engineer: local
config:
driver: sample
- collector:
- - name: logfile
+ collectors:
+ - type: logfile
logs:
- filename: doctor_consumer.log
# 2016-12-28 03:16:05,630 consumer.py 26 INFO doctor consumer notified at 1482894965.63
facility: local
engineer: local
driver: sample
- collector: logfile
+ collectors: []
reporter: console
QPIs:
- fake-qpi.yaml
import pytest
-from qtip.base.constant import PlanProp
-from qtip.loader.plan import Plan, QPISpec
+from qtip.loader.plan import Plan
+from qtip.loader.plan import PlanProp
+from qtip.loader.plan import QPISpec
def test_init(plan):