diff --git a/README.md b/README.md index 5e6793f..7a102a9 100644 --- a/README.md +++ b/README.md @@ -124,5 +124,45 @@ $ klugman streams --older_than 01-31-2015T13:30 $ klugman streams --older_than 01-31-2015T13:30 --state completed ... -``` +$ klugman events --traits=os_distro:com.redhat ++--------------------+------------------------------------------+ +| Property | Value | ++--------------------+------------------------------------------+ +| _mark | 1 | +| bandwidth_in | 537783 | +| bandwidth_out | 19189871 | +| disk_gb | 160 | +| display_name | Instance_296624 | +| ephemeral_gb | 0 | +| event_type | compute.instance.update | +| instance_flavor | 4GB Standard Instance | +| instance_flavor_id | 5 | +| instance_id | 60c52a73-ec8e-47bc-81eb-eee38931a60e | +| instance_type | 4GB Standard Instance | +| launched_at | 2014-04-17 11:40:15.321940 | +| memory_mb | 4096 | +| message_id | 8eca72ba-3adb-4354-aaa4-f61980549e07 | +| os_architecture | x64 | +| os_distro | com.redhat | +| os_version | 6.3 | +| request_id | req-511c28a6-c6ec-4173-a124-7c92989e443c | +| root_gb | 160 | +| service | publisher-189550 | +| state | active | +| state_description | powering-off | +| tenant_id | 854126 | +| timestamp | 2015-03-03 20:13:56.560940 | +| user_id | 366869 | +| vcpus | 2 | ++--------------------+------------------------------------------+ +$ klugman events --msg_id=8eca72ba-3adb-4354-aaa4-f61980549e07 +... + + +$ klugman events --name=compute.instance.power_off.end +... + +$ klugman events --from="2015-03-04T22:25" --to="2015-03-04T22:45" + +``` diff --git a/klugman/base.py b/klugman/base.py index f728e86..697c71d 100644 --- a/klugman/base.py +++ b/klugman/base.py @@ -27,7 +27,8 @@ def dump_response(keys, rows): for row in rows: x = prettytable.PrettyTable(["Property", "Value"]) for key in keys: - x.add_row([key, row.get(key)]) + if key in row: + x.add_row([key, row[key]]) print x diff --git a/klugman/klugman.py b/klugman/klugman.py index b32a18c..1087e1a 100644 --- a/klugman/klugman.py +++ b/klugman/klugman.py @@ -40,7 +40,7 @@ import v1 import v2 versions = {1: v1.V1, 2: v2.V2} -latest = 2 +latest = 1 def main(): diff --git a/klugman/v1.py b/klugman/v1.py index e3a174f..636cd3a 100644 --- a/klugman/v1.py +++ b/klugman/v1.py @@ -191,15 +191,73 @@ class NumStreams(object): return base.get(version.base_url, cmd, params) +class Events(object): + """usage: + klugman.py events [options] + + options: + --debug + --name + return events of type + --from + list events generated before datetime + --to + list events generated after datetime + --traits + list events with specific traits + --msg_id + get event with + + Trait format: + "trait:value;trait:value;..." + """ + + def cmdline(self, version, cmdline): + arguments = docopt(Events.__doc__, argv=cmdline) + debug = version.base_args['--debug'] + if debug: + print arguments + + response = self.do_event(version, arguments) + raw_rows = response.json(object_hook=jsonutil.object_hook) + + keys = set() + for row in raw_rows: + keys.update(row.keys()) + keys = sorted(list(keys)) + base.dump_response(keys, raw_rows) + + def do_event(self, version, arguments): + _from = arguments.get('--from') + _to = arguments.get('--to') + name = arguments.get('--name') + traits = arguments.get('--traits') + msg_id = arguments.get('--msg_id') + + if msg_id: + cmd = "events/%s" % msg_id + return base.get(version.base_url, cmd, {}) + + cmd = "events" + params = base.remove_empty({'from_datetime': _from, + 'to_datetime': _to, + 'event_name': name, + 'traits': traits}) + + return base.get(version.base_url, cmd, params) + + class V1(base.Impl): """usage: klugman.py streams [...] [options] klugman.py num-streams [...] [options] + klugman.py events [...] [options] -h, --help show command options """ def __init__(self, base_url, base_args): cmds = {'streams': Streams(), - 'num-streams': NumStreams()} + 'num-streams': NumStreams(), + 'events': Events()} super(V1, self).__init__(base_url, base_args, cmds, V1.__doc__) diff --git a/klugman/v2.py b/klugman/v2.py index 95416a3..e61dc2c 100644 --- a/klugman/v2.py +++ b/klugman/v2.py @@ -65,6 +65,7 @@ class V2(base.Impl): Usage: klugman.py [options] streams [...] klugman.py num-streams [...] [options] + klugman.py events [...] [options] klugman.py [options] archives [...] Options: @@ -74,5 +75,6 @@ Options: def __init__(self, base_url, base_args): cmds = {'streams': v1.Streams(), 'num-streams': v1.NumStreams(), + 'events': v1.Events(), 'archives': Archives()} super(V2, self).__init__(base_url, base_args, cmds, V2.__doc__) diff --git a/setup.cfg b/setup.cfg index 0e64215..6c6e5dd 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = klugman -version = 0.1 +version = 0.2 author = Dark Secret Software Inc. author-email = admin@darksecretsoftware.com summary = StackTach.v3 Client