kloudbuster/kloudbuster/perf_instance.py

66 lines
2.2 KiB
Python

# Copyright 2015 Cisco Systems, Inc. All rights reserved.
#
# 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.
#
from kloudbuster.base_compute import BaseCompute
from kloudbuster.fio_tool import FioTool
from kloudbuster.nuttcp_tool import NuttcpTool
from kloudbuster.wrk_tool import WrkTool
# An openstack instance (can be a VM or a LXC)
class PerfInstance(BaseCompute):
def __init__(self, vm_name, network, config):
BaseCompute.__init__(self, vm_name, network)
self.config = config
self.boot_info = {}
self.user_data = {}
self.up_flag = False
# SSH Configuration
self.ssh_access = None
self.ssh = None
self.az = None
self.storage_mode = network.router.user.tenant.kloud.storage_mode
self.multicast_mode = network.router.user.tenant.kloud.multicast_mode
if self.multicast_mode:
self.perf_tool = NuttcpTool(self)
else:
self.perf_tool = FioTool(self) if self.storage_mode else WrkTool(self)
def perf_client_parser(self, status, stdout, stderr):
res = {'vm_name': self.vm_name}
perf_tool_res = self.perf_tool.cmd_parser_run_client(status, stdout, stderr)
if not self.storage_mode:
res['target_url'] = self.target_url
res['ip_from'] = self.ssh_ip
# consolidate results for all tools
res['results'] = perf_tool_res
return res
# Send a command on the ssh session
def exec_command(self, cmd, timeout=30):
(status, cmd_output, err) = self.ssh.execute(cmd, timeout=timeout)
return (status, cmd_output, err)
# Dispose the ssh session
def dispose(self):
if self.ssh:
self.ssh.close()
self.ssh = None