| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- #!/usr/bin/python
- import ConfigParser
- import json
- import os
- from os import path
- import socket
- import sys
- import urllib2
- import psutil
- is_root = (os.getuid() == 0)
- config = ConfigParser.RawConfigParser()
- if is_root:
- cfg_path = '/etc/sysvitals.cfg'
- else:
- cfg_path = path.join(path.dirname(path.abspath(__file__)), 'sysvitals.cfg')
- def post():
- if not config.read(cfg_path):
- sys.exit('no config found at %s' % cfg_path)
- cpu = psutil.cpu_times()
- mem = psutil.virtual_memory()
- net = psutil.net_io_counters()
- datum = {
- 'cpu': cpu._asdict(),
- 'mem': {
- 'total': mem.total,
- 'used': mem.used,
- 'buffers': mem.buffers,
- 'cached': mem.cached,
- },
- 'net': net._asdict(),
- 'disk': {}
- }
- datum['cpu']['num_cpus'] = psutil.NUM_CPUS
- for partition in psutil.disk_partitions():
- usage = psutil.disk_usage(partition.mountpoint)
- datum['disk'][partition.mountpoint] = {
- 'total': usage.total,
- 'used': usage.used,
- }
- api_server = config.get('client', 'api_server')
- group_id = config.get('client', 'group_id')
- server_id = config.get('client', 'server_id')
- url = '%s/v1/%s/datum/%s' % (api_server, group_id, server_id)
- urllib2.urlopen(url, json.dumps(datum))
- def configure():
- if not is_root:
- print 'configuring sysvitals client not as root will create a local config'
- if raw_input('are you sure you want to continue? [y/N] ') != 'y':
- return
- if path.exists(cfg_path):
- print cfg_path, 'already exists'
- if raw_input('are you sure you want to continue? [y/N] ') != 'y':
- return
- default_api_server = 'http://localhost:8892'
- config.add_section('client')
- config.set('client', 'api_server', default_api_server)
- group_id = None
- while group_id is None:
- group_id = raw_input('group_id: ')
- try:
- int(group_id)
- except ValueError:
- group_id = None
- print 'group_id should be numeric'
- config.set('client', 'group_id', group_id)
- print 'getting a brand new server id'
- try:
- url = '%s/v1/%s/register_server' % (default_api_server, group_id)
- r = urllib2.urlopen(url, json.dumps({'hostname': socket.getfqdn()}))
- server_id = json.load(r)['server_id']
- except Exception as e:
- sys.exit('an error occurred while getting the new server id:\n%r' % e)
- config.set('client', 'server_id', server_id)
- print 'writing config to', cfg_path
- with open(cfg_path, 'w') as f:
- config.write(f)
- if len(sys.argv) > 1 and sys.argv[1] == '--configure':
- configure()
- else:
- post()
|