summaryrefslogtreecommitdiffstats
path: root/vstf/vstf/agent/softagent.py
blob: 6271a09765cdf621e007743ab1c7a3e49ab01ca6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
##############################################################################
# Copyright (c) 2015 Huawei Technologies Co.,Ltd 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
##############################################################################


import logging
import time
from vstf.agent.env.basic.image_manager import ImageManager
from vstf.agent.env.basic.source_manager import SourceCodeManager
from vstf.agent.env.basic import commandline
from vstf.agent.env.basic.device_manager import DeviceManager
from vstf.agent.env.basic import collect as coll
from vstf.agent.perf import netns, vnstat, vstfperf, sar, ethtool, affctl
from vstf.agent.env import builder
from vstf.agent.equalizer.get_info import GetPhyInfo
from vstf.agent.equalizer.optimize import Optimize
from vstf.agent.env.driver_plugins.manager import DriverPluginManager

LOG = logging.getLogger(__name__)


class ENV(object):
    def __init__(self):
        super(ENV, self).__init__()
        self.builder = builder.PluginManager()

    def build_env(self, cfg_intent):
        return self.builder.build(cfg_intent)

    def clean_env(self):
        return self.builder.clean()

    @staticmethod
    def create_images(cfg):
        return ImageManager(cfg).create_all()

    @staticmethod
    def clean_images(cfg):
        return ImageManager(cfg).clean_all()


class Drivers(object):
    def __init__(self):
        super(Drivers, self).__init__()
        self.dr_mgr = DriverPluginManager()

    def install_drivers(self, drivers):
        LOG.info("install drivers:%s", drivers)
        self.dr_mgr.clean()
        ret = self.dr_mgr.load(drivers)
        return ret

    def clean_drivers(self):
        return self.dr_mgr.clean()

    def autoneg_on(self, iface, nspace):
        return ethtool.autoneg_on(iface, nspace)

    def autoneg_off(self, iface, nspace):
        return ethtool.autoneg_off(iface, nspace)

    def autoneg_query(self, iface, nspace):
        return ethtool.autoneg_query(iface, nspace)


class Cpu(object):
    def affctl_load(self, policy):
        return affctl.affctl_load(policy)

    def affctl_list(self):
        return affctl.affctl_list()


class Perf(object):
    def __init__(self):
        super(Perf, self).__init__()
        self._vnstat = vnstat.VnStat()
        self._vstfperf = vstfperf.Vstfperf()
        self._sar = sar.Sar()
   
    def run_vnstat(self, device, namespace=None):
        return self._vnstat.run_vnstat(device, namespace)

    def kill_vnstat(self, pid, namespace=None):
        return self._vnstat.kill_vnstat(pid, namespace)

    def perf_run(self, **kwargs):
        return self._vstfperf.run(**kwargs)

    def run_cpuwatch(self, interval = 2):
        return self._sar.start(interval)

    def kill_cpuwatch(self, pid):
        return self._sar.stop(pid)

    def force_clean(self):
        self._vstfperf.force_clean()
        self._sar.force_clean()
        self._vnstat.force_clean()
        return True


class EqualizerOps(GetPhyInfo, Optimize):
    def __init__(self):
        super(EqualizerOps, self).__init__()


class BaseAgent(coll.Collect,
                ENV,
                Cpu,
                Drivers,
                DeviceManager,
                commandline.CommandLine, 
                netns.NetnsManager,
                SourceCodeManager
                ):
    def __init__(self):
        super(BaseAgent, self).__init__()


class softAgent(BaseAgent, Perf, EqualizerOps):
    def __init__(self):
        super(softAgent, self).__init__()


if __name__ == '__main__':
    softAgent()