|
| 1 | +import logging |
| 2 | +import os |
| 3 | +from unittest import mock |
| 4 | +from nose2.tools.decorators import with_setup |
| 5 | +from source.profiler import Profiler |
| 6 | +from source.metadata import MetadataHandler |
| 7 | +from source.confgenerator import PrometheusConfigGenerator |
| 8 | + |
| 9 | + |
| 10 | +def my_setup(): |
| 11 | + global attr, args, endpoints, sensors_conf |
| 12 | + |
| 13 | + attr = {'port': 4242, 'prometheus': 9250, 'rawCounters': True, 'protocol': 'http', 'enabled': True, |
| 14 | + 'username': 'scale_admin', 'password': 'TXlWZXJ5U3Ryb25nUGFzc3cwcmQhCg==', 'server': 'localhost', |
| 15 | + 'serverPort': 9980, 'retryDelay': 60, 'apiKeyName': 'scale_grafana', |
| 16 | + 'apiKeyValue': 'c0a910e4-094a-46d8-b04d-c2f73a43fd17', 'caCertPath': False, |
| 17 | + 'includeDiskData': False, 'logPath': '/var/log/ibm_bridge_for_grafana', 'logLevel': 10, |
| 18 | + 'logFile': 'zserver.log'} |
| 19 | + args = {'server': 'localhost', 'port': 9980, 'retryDelay': 60, |
| 20 | + 'apiKeyName': 'scale_grafana', |
| 21 | + 'apiKeyValue': 'c0a910e4-094a-46d8-b04d-c2f73a43fd17'} |
| 22 | + |
| 23 | + endpoints = {"/metrics_gpfs_disk": "GPFSDisk", |
| 24 | + "/metrics_gpfs_filesystem": "GPFSFilesystem", |
| 25 | + "//metrics_gpfs_fileset": "GPFSFileset", |
| 26 | + "/metrics_gpfs_pool": "GPFSPool"} |
| 27 | + |
| 28 | + sensors_conf = [{'name': '"CPU"', 'period': '1'}, |
| 29 | + {'name': '"Load"', 'period': '1'}, |
| 30 | + {'name': '"Memory"', 'period': '1'}, |
| 31 | + {'filter': '"netdev_name=veth.*|docker.*|flannel.*|cali.*|cbr.*"', |
| 32 | + 'name': '"Network"', 'period': '1'}, |
| 33 | + {'name': '"Netstat"', 'period': '10'}, |
| 34 | + {'name': '"Diskstat"', 'period': '0'}, |
| 35 | + {'filter': '"mountPoint=/.*/docker.*|/.*/kubelet.*"', 'name': '"DiskFree"', 'period': '600'}, |
| 36 | + {'name': '"Infiniband"', 'period': '0'}, |
| 37 | + {'name': '"GPFSDisk"', 'period': '0'}, |
| 38 | + {'name': '"GPFSFilesystem"', 'period': '10'}, |
| 39 | + {'name': '"GPFSNSDDisk"', 'period': '10', 'restrict': '"nsdNodes"'}, |
| 40 | + {'name': '"GPFSPoolIO"', 'period': '0'}, {'name': '"GPFSVFSX"', 'period': '10'}, |
| 41 | + {'name': '"GPFSIOC"', 'period': '0'}, {'name': '"GPFSVIO64"', 'period': '0'}, |
| 42 | + {'name': '"GPFSPDDisk"', 'period': '10', 'restrict': '"nsdNodes"'}, |
| 43 | + {'name': '"GPFSvFLUSH"', 'period': '0'}, {'name': '"GPFSNode"', 'period': '10'}, |
| 44 | + {'name': '"GPFSNodeAPI"', 'period': '10'}, {'name': '"GPFSFilesystemAPI"', 'period': '10'}, |
| 45 | + {'name': '"GPFSLROC"', 'period': '0'}, {'name': '"GPFSCHMS"', 'period': '0'}, |
| 46 | + {'name': '"GPFSAFM"', 'period': '10', 'restrict': '"scale-16.vmlocal,scale-17.vmlocal"'}, |
| 47 | + {'name': '"GPFSAFMFS"', 'period': '10', 'restrict': '"scale-16.vmlocal,scale-17.vmlocal"'}, |
| 48 | + {'name': '"GPFSAFMFSET"', 'period': '10', 'restrict': '"scale-16.vmlocal,scale-17.vmlocal"'}, |
| 49 | + {'name': '"GPFSRPCS"', 'period': '10'}, {'name': '"GPFSWaiters"', 'period': '10'}, |
| 50 | + {'name': '"GPFSFilesetQuota"', 'period': '3600', 'restrict': '"@CLUSTER_PERF_SENSOR"'}, |
| 51 | + {'name': '"GPFSFileset"', 'period': '300', 'restrict': '"@CLUSTER_PERF_SENSOR"'}, |
| 52 | + {'name': '"GPFSPool"', 'period': '300', 'restrict': '"@CLUSTER_PERF_SENSOR"'}, |
| 53 | + {'name': '"GPFSDiskCap"', 'period': '86400', 'restrict': '"@CLUSTER_PERF_SENSOR"'}, |
| 54 | + {'name': '"GPFSEventProducer"', 'period': '0'}, {'name': '"GPFSMutex"', 'period': '0'}, |
| 55 | + {'name': '"GPFSCondvar"', 'period': '0'}, {'name': '"TopProc"', 'period': '60'}, |
| 56 | + {'name': '"GPFSQoS"', 'period': '0'}, {'name': '"GPFSFCM"', 'period': '0'}, |
| 57 | + {'name': '"GPFSBufMgr"', 'period': '30'}, |
| 58 | + {'name': '"NFSIO"', 'period': '10', 'restrict': '"cesNodes"', 'type': '"Generic"'}, |
| 59 | + {'name': '"SMBStats"', 'period': '1', 'restrict': '"cesNodes"', 'type': '"Generic"'}, |
| 60 | + {'name': '"SMBGlobalStats"', 'period': '1', 'restrict': '"cesNodes"', 'type': '"Generic"'}, |
| 61 | + {'name': '"CTDBStats"', 'period': '1', 'restrict': '"cesNodes"', 'type': '"Generic"'}, |
| 62 | + {'name': '"CTDBDBStats"', 'period': '1', 'restrict': '"cesNodes"', 'type': '"Generic"'}] |
| 63 | + |
| 64 | + |
| 65 | +@with_setup(my_setup) |
| 66 | +def test_case01(): |
| 67 | + with mock.patch('source.metadata.MetadataHandler._MetadataHandler__initializeTables') as md_init: |
| 68 | + with mock.patch('source.metadata.MetadataHandler._MetadataHandler__getSupportedMetrics') as md_supp: |
| 69 | + with mock.patch('source.metadata.MetadataHandler.SensorsConfig', return_value=sensors_conf) as md_sensConf: |
| 70 | + with mock.patch('source.confgenerator.PrometheusConfigGenerator.host_ip', return_value='127.0.0.1'): |
| 71 | + logger = logging.getLogger(__name__) |
| 72 | + args['logger'] = logger |
| 73 | + md = MetadataHandler(**args) |
| 74 | + md.__initializeTables = md_init.return_value |
| 75 | + md.__getSupportedMetrics = md_supp.return_value |
| 76 | + md.SensorsConfig = md_sensConf.return_value |
| 77 | + conf_generator = PrometheusConfigGenerator(logger, md, attr, endpoints) |
| 78 | + resp = conf_generator.generate_config() |
| 79 | + assert isinstance(resp, str) |
| 80 | + assert len(resp) > 0 |
| 81 | + |
| 82 | + |
| 83 | +@with_setup(my_setup) |
| 84 | +def test_case02(): |
| 85 | + with mock.patch('source.metadata.MetadataHandler._MetadataHandler__initializeTables') as md_init: |
| 86 | + with mock.patch('source.metadata.MetadataHandler._MetadataHandler__getSupportedMetrics') as md_supp: |
| 87 | + with mock.patch('source.metadata.MetadataHandler.SensorsConfig', return_value=sensors_conf) as md_sensConf: |
| 88 | + with mock.patch('source.confgenerator.PrometheusConfigGenerator.host_ip', return_value='127.0.0.1'): |
| 89 | + logger = logging.getLogger(__name__) |
| 90 | + args['logger'] = logger |
| 91 | + md = MetadataHandler(**args) |
| 92 | + md.__initializeTables = md_init.return_value |
| 93 | + md.__getSupportedMetrics = md_supp.return_value |
| 94 | + md.SensorsConfig = md_sensConf.return_value |
| 95 | + conf_generator = PrometheusConfigGenerator(logger, md, attr, endpoints) |
| 96 | + profiler = Profiler() |
| 97 | + resp = profiler.run(conf_generator.generate_config) |
| 98 | + assert resp is not None |
| 99 | + assert os.path.exists(os.path.join(profiler.path, "profiling_generate_config.prof")) |
| 100 | + response = profiler.stats(os.path.join(profiler.path, "profiling_generate_config.prof")) |
| 101 | + assert response is not None |
| 102 | + print('\n'.join(response) + '\n') |
0 commit comments