Commit b5bad4ebbc6a41b686cd8238b1294a13b06abaa6

Authored by Eduardo Santos
1 parent 4d5ceade
Exists in master

Delete .gitignore

Arquivo para JS que não será mais utilizado
.gitignore
1   -# Logs
2   -logs
  1 +# Byte-compiled / optimized / DLL files
  2 +__pycache__/
  3 +*.py[cod]
  4 +# C extensions
  5 +*.so
  6 +# Distribution / packaging
  7 +.Python
  8 +env/
  9 +build/
  10 +develop-eggs/
  11 +dist/
  12 +downloads/
  13 +eggs/
  14 +lib/
  15 +lib64/
  16 +parts/
  17 +sdist/
  18 +var/
  19 +*.egg-info/
  20 +.installed.cfg
  21 +*.egg
  22 +# PyInstaller
  23 +# Usually these files are written by a python script from a template
  24 +# before PyInstaller builds the exe, so as to inject date/other infos into it.
  25 +*.manifest
  26 +*.spec
  27 +# Installer logs
  28 +pip-log.txt
  29 +pip-delete-this-directory.txt
  30 +# Unit test / coverage reports
  31 +htmlcov/
  32 +.tox/
  33 +.coverage
  34 +.cache
  35 +nosetests.xml
  36 +coverage.xml
  37 +# Translations
  38 +*.mo
  39 +*.pot
  40 +# Django stuff:
3 41 *.log
4   -
5   -# Runtime data
6   -pids
7   -*.pid
8   -*.seed
9   -
10   -# Directory for instrumented libs generated by jscoverage/JSCover
11   -lib-cov
12   -
13   -# Coverage directory used by tools like istanbul
14   -coverage
15   -
16   -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17   -.grunt
18   -
19   -# Compiled binary addons (http://nodejs.org/api/addons.html)
20   -build/Release
21   -
22   -# Dependency directory
23   -# Commenting this out is preferred by some people, see
24   -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git-
25   -node_modules
26   -
27   -# Users Environment Variables
28   -.lock-wscript
  42 +# Sphinx documentation
  43 +docs/_build/
  44 +# PyBuilder
  45 +target/
... ...
README.md
... ... @@ -2,3 +2,11 @@ cocar-agente
2 2 ============
3 3  
4 4 Módulo agente coletor para o software Cocar
  5 +
  6 +* Dependência: python-netsnmp
  7 +
  8 +Para funcionar é necessário primeiro instalar o pacote da distribuição e só depois criar o virtualenv:
  9 +
  10 +<pre>
  11 +virtualenv --system-site-packages -p /usr/bin/python2.7 cocar-agente
  12 +</pre>
5 13 \ No newline at end of file
... ...
cocar/__init__.py 0 → 100644
... ... @@ -0,0 +1 @@
  1 +__author__ = 'eduardo'
... ...
cocar/host.py 0 → 100644
... ... @@ -0,0 +1,57 @@
  1 +#!/bin/env python
  2 +# -*- coding: utf-8 -*-
  3 +# Inspired by the code in http://www.copyandwaste.com/posts/view/multiprocessing-snmp-with-python/
  4 +__author__ = 'eduardo'
  5 +
  6 +import netsnmp
  7 +
  8 +
  9 +
  10 +class Host(object):
  11 + """
  12 + Creates a host record
  13 + """
  14 +
  15 + def __init__(self,
  16 + hostname=None,
  17 + query=None):
  18 + self.hostname = hostname
  19 + self.query = query
  20 +
  21 +
  22 +class SnmpSession():
  23 + """A SNMP Session"""
  24 + def __init__(self,
  25 + oid=".1.3.6.1.2.1.1.1.0",
  26 + iid=None,
  27 + Version=2,
  28 + DestHost="localhost",
  29 + Community="public",
  30 + Verbose=True,
  31 + ):
  32 + self.oid = oid
  33 + self.Version = Version
  34 + self.DestHost = DestHost
  35 + self.Community = Community
  36 + self.Verbose = Verbose
  37 + self.var = netsnmp.Varbind(oid, iid)
  38 + self.hostrec = Host()
  39 + self.hostrec.hostname = self.DestHost
  40 +
  41 + def query(self):
  42 + """Creates SNMP query
  43 +
  44 + Fills out a Host Object and returns result
  45 + """
  46 + try:
  47 + result = netsnmp.snmpget(self.var,
  48 + Version=self.Version,
  49 + DestHost=self.DestHost,
  50 + Community=self.Community)
  51 + self.hostrec.query = result
  52 + except Exception, err:
  53 + if self.Verbose:
  54 + print err
  55 + self.hostrec.query = None
  56 + finally:
  57 + return self.hostrec
0 58 \ No newline at end of file
... ...
cocar/query.py 0 → 100644
... ... @@ -0,0 +1,64 @@
  1 +#!/bin/env python
  2 +# -*- coding: utf-8 -*-
  3 +# Inspired by the code in http://www.copyandwaste.com/posts/view/multiprocessing-snmp-with-python/
  4 +__author__ = 'eduardo'
  5 +
  6 +from host import SnmpSession
  7 +from multiprocessing import Process, Queue, current_process
  8 +
  9 +
  10 +def make_query(host):
  11 + """This does the actual snmp query
  12 +
  13 + This is a bit fancy as it accepts both instances
  14 + of SnmpSession and host/ip addresses. This
  15 + allows a user to customize mass queries with
  16 + subsets of different hostnames and community strings
  17 + """
  18 + if isinstance(host, SnmpSession):
  19 + return host.query()
  20 + else:
  21 + s = SnmpSession(DestHost=host)
  22 + return s.query()
  23 +
  24 +
  25 +# Function run by worker processes
  26 +def worker(inp, output):
  27 + for func in iter(inp.get, 'STOP'):
  28 + result = make_query(func)
  29 + output.put(result)
  30 +
  31 +def main():
  32 + """Runs everything"""
  33 +
  34 + #clients
  35 + hosts = [
  36 + SnmpSession(DestHost="10.71.1.1", Community="my-pub-community", oid="1.3.6.1.4.1.9.9.42.1.2.10.1.1", iid="1"),
  37 + SnmpSession(DestHost="10.81.1.1", Community="my-pub-community", oid="1.3.6.1.4.1.9.9.42.1.2.10.1.1", iid="123")
  38 + ]
  39 + NUMBER_OF_PROCESSES = len(hosts)
  40 +
  41 + # Create queues
  42 + task_queue = Queue()
  43 + done_queue = Queue()
  44 +
  45 + #submit tasks
  46 + for host in hosts:
  47 + task_queue.put(host)
  48 +
  49 + #Start worker processes
  50 + for i in range(NUMBER_OF_PROCESSES):
  51 + Process(target=worker, args=(task_queue, done_queue)).start()
  52 +
  53 + # Get and print results
  54 + print 'Unordered results:'
  55 + for i in range(len(hosts)):
  56 + print '\t', done_queue.get().query
  57 +
  58 + # Tell child processes to stop
  59 + for i in range(NUMBER_OF_PROCESSES):
  60 + task_queue.put('STOP')
  61 + #print "Stopping Process #%s" % i
  62 +
  63 +if __name__ == "__main__":
  64 + main()
0 65 \ No newline at end of file
... ...
cocar/tests/__init__.py 0 → 100644
... ... @@ -0,0 +1 @@
  1 +__author__ = 'eduardo'
... ...
cocar/tests/test_discover.py 0 → 100644
... ... @@ -0,0 +1,45 @@
  1 +#!/bin/env python
  2 +# -*- coding: utf-8 -*-
  3 +__author__ = 'eduardo'
  4 +
  5 +import unittest
  6 +from ..host import Host, SnmpSession
  7 +
  8 +
  9 +class TestDiscover(unittest.TestCase):
  10 + """
  11 + Testa descoberta de ativos de rede utilizando snmp
  12 + """
  13 +
  14 + def setUp(self):
  15 + """
  16 + Parâmetros iniciais
  17 + """
  18 +
  19 + def test_active(self):
  20 + """
  21 + Teste que verifica se o ativo de rede está ativo
  22 + """
  23 + session = SnmpSession()
  24 + result = session.query()
  25 + print(result.query[0])
  26 + self.assertIsNotNone(result.query[0])
  27 +
  28 + def test_inactive(self):
  29 + """
  30 + Teste que identifica que um nó inativo
  31 + """
  32 + session = SnmpSession(DestHost="192.168.0.201")
  33 + result = session.query()
  34 + print(result.query[0])
  35 + self.assertIsNone(result.query[0])
  36 +
  37 + def test_identify(self):
  38 + """
  39 + Teste que identifica qual é o ativo
  40 + """
  41 +
  42 + def tearDown(self):
  43 + """
  44 + Apaga dados inicias
  45 + """
0 46 \ No newline at end of file
... ...
setup.py 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +from distutils.core import setup
  2 +
  3 +requires = [
  4 + 'multiprocessing',
  5 +]
  6 +
  7 +
  8 +setup(
  9 + name='cocar-agente',
  10 + version='1.0',
  11 + packages=['cocar', 'cocar.tests'],
  12 + url='http://github.com/lightbase/cocar-agente',
  13 + license='CC-GPL v2.0',
  14 + author='Lightbase Consultoria',
  15 + author_email='info@lightbase.com.br',
  16 + description='Agente coletor do software Cocar',
  17 + install_requires=requires,
  18 +)
... ...