1
# Licensed under the Apache License, Version 2.0 (the "License"); you may
2
# not use this file except in compliance with the License. You may obtain
3
# a copy of the License at
5
# http://www.apache.org/licenses/LICENSE-2.0
7
# Unless required by applicable law or agreed to in writing, software
8
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10
# License for the specific language governing permissions and limitations
13
"""Command line tool for sending test data for Ceilometer via oslo.messaging.
17
Send messages with samples generated by make_test_data
19
source .tox/py27/bin/activate
20
./tools/send_test_data.py --count 1000 --resources_count 10 --topic metering
29
from oslo_context import context
31
from ceilometer import messaging
32
from ceilometer import service
35
def send_batch(rpc_client, topic, batch):
36
rpc_client.prepare(topic=topic).cast(context.RequestContext(),
37
'record_metering_data', data=batch)
40
def get_rpc_client(config_file):
41
service.prepare_service(argv=['/', '--config-file', config_file])
42
transport = messaging.get_transport()
43
rpc_client = messaging.get_rpc_client(transport, version='1.0')
47
def generate_data(rpc_client, make_data_args, samples_count,
48
batch_size, resources_count, topic):
49
make_data_args.interval = 1
50
make_data_args.start = (datetime.datetime.utcnow() -
51
datetime.timedelta(minutes=samples_count))
52
make_data_args.end = datetime.datetime.utcnow()
54
make_data_args.resource_id = None
55
resources_list = [str(uuid.uuid4())
56
for _ in xrange(resources_count)]
57
resource_samples = {resource: 0 for resource in resources_list}
60
for sample in make_test_data.make_test_data(**make_data_args.__dict__):
62
resource = resources_list[random.randint(0, len(resources_list) - 1)]
63
resource_samples[resource] += 1
64
sample['resource_id'] = resource
66
if len(batch) == batch_size:
67
send_batch(rpc_client, topic, batch)
69
if count == samples_count:
70
send_batch(rpc_client, topic, batch)
71
return resource_samples
72
send_batch(rpc_client, topic, batch)
73
return resource_samples
77
parser = argparse.ArgumentParser()
86
default='/etc/ceilometer/ceilometer.conf'
90
default='perfmetering'
100
dest='resources_count',
105
'--result-directory',
113
args = get_parser().parse_known_args()[0]
114
make_data_args = make_test_data.get_parser().parse_known_args()[0]
115
rpc_client = get_rpc_client(args.config_file)
116
result_dir = args.result_dir
120
resource_writes = generate_data(rpc_client, make_data_args,
122
result_file = "%s/sample-by-resource-%s" % (result_dir,
123
random.getrandbits(32))
124
with open(result_file, 'w') as f:
125
f.write(json.dumps(resource_writes))
129
if __name__ == '__main__':