Init agent, common, unittest.

This commit is contained in:
yaowei 2015-12-22 23:32:36 +08:00
parent 0dfa3b2e1a
commit 2a69a78d58
16 changed files with 248 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
*.pyc
stetho.egg-info/
build/
dist/

28
setup.py Normal file
View File

@ -0,0 +1,28 @@
# Copyright 2015 UnitedStack, 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 setuptools import setup, find_packages
setup(name='stetho',
version="0.1.0",
packages = find_packages(),
zip_safe = False,
description = "stetho",
author = "UnitedStackSDN",
author_email = "unitedstack-sdn@googlegroups.com",
license = "APL",
keywords = ("stetho", "egg"),
platforms = "Independant",
url = "https://www.ustack.com")

0
stetho/agent/__init__.py Normal file
View File

77
stetho/agent/agent.py Normal file
View File

@ -0,0 +1,77 @@
# Copyright 2015 UnitedStack, 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.
import os
import sys
import zerorpc
# Listening endpoint
LISTEN_PROTOCOL = 'tcp'
LISTEN_ADDR = '0.0.0.0'
LISTEN_PORT = '9698'
class AgentApi(object):
"""Agent Api.
"""
def __init__(self):
pass
def check_ports_on_br(self, bridge, ports=[]):
"""ovs-vsctl list-ports bridge
"""
pass
def ping(self, ips, boardcast=False,
count=2, timeout=2, interface=None):
"""ping host -c 2 -W 2
packet loss
"""
pass
def add_vlan_to_interface(self, interface, vlan_id):
"""ip link add link
"""
pass
def get_interface_info(self, interface):
"""ifconfig
"""
pass
def setup_link(self, interface, cidr):
"""IP addr and ifup
check net_cidr
10.0.0.0/24 -> 10.0.0.64/24
"""
pass
def teardown_link(self, interface):
"""ip link
"""
pass
def main():
# log
args = sys.argv[1:]
s = zerorpc.Server(AgentApi())
endpoint = '%s://%s:%s' % (LISTEN_PROTOCOL, LISTEN_ADDR, LISTEN_PORT)
s.bind(endpoint)
s.run()
if __name__ == '__main__':
main()

View File

View File

@ -0,0 +1,31 @@
# Copyright 2015 UnitedStack, 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.
import time
import shlex
import subprocess
from stetho.common import log
log = log.get_logger('/opt/stack/logs/stetho-agent.log')
def execute(cmd, time=None, shell=False):
try:
log.info(cmd)
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=shell)
out = p.stdout.readlines()
return [line.strip() for line in out]
except Exception as e:
log.exception(e)

View File

28
stetho/common/log.py Normal file
View File

@ -0,0 +1,28 @@
# Copyright 2015 UnitedStack, 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.
import logging
FORMAT = '%(asctime)s %(filename)s %(levelname)s %(message)s'
DATEFMT = '%d %b %Y %H:%M:%S'
def get_logger(filename, format=FORMAT,
datefmt=DATEFMT, filemod='a+',
level=logging.DEBUG):
logging.basicConfig(level=level, format=format, datefmt=datefmt,
filename=filename, filemod=filemod)
log = logging.getLogger()
return log

0
tests/__init__.py Normal file
View File

0
tests/unit/__init__.py Normal file
View File

View File

View File

View File

@ -0,0 +1,38 @@
# Copyright 2015 UnitedStack, 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.
import unittest
from stetho.agent.common import utils
class TestUtils(unittest.TestCase):
def setUp(self):
self.test_file = self.get_temp_file_path('test_execute.tmp')
open(self.test_file, 'w+').close()
def test_execute(self):
expected = "%s\n" % self.test_file
result = utils.execute(["ls", self.test_file])
self.assertEqual(result.pop(), expected.strip('\n'))
def get_temp_file_path(self, filename, root=None):
root = '/tmp/%s'
return root % filename
if __name__ == '__main__':
unittest.main()

View File

@ -0,0 +1,14 @@
# Copyright 2015 UnitedStack, 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.

View File

View File

@ -0,0 +1,28 @@
# Copyright 2015 UnitedStack, 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.
import unittest
import logging
from stetho.common import log
class TestLog(unittest.TestCase):
def test_get_logger(self):
log_test = log.get_logger(filename='test')
self.assertEqual(type(log_test), type(logging.getLogger()))
if __name__ == '__main__':
unittest.main()