Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion bin/dough-api
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ import sys

import zmq

from nova import utils
from nova import flags
from nova import log as logging
from nova import utils

from dough import api
from dough import context as dough_context
from kanyun.common.app import App

utils.default_flagfile(filename='/etc/dough/dough.conf')
flags.FLAGS(sys.argv)
Expand All @@ -21,10 +22,12 @@ FLAGS = flags.FLAGS

if __name__ == '__main__':
zmq_context = zmq.Context()
app = App(conf="dough/dough.conf", name="dough-api")

# Socket to receive messages on
handler = zmq_context.socket(zmq.REP)
handler.bind("tcp://%s:%s" % (FLAGS.api_listen, FLAGS.api_listen_port))
print "listen:", FLAGS.api_listen, FLAGS.api_listen_port

poller = zmq.Poller()
poller.register(handler, zmq.POLLIN)
Expand All @@ -40,10 +43,17 @@ if __name__ == '__main__':
method = msg_body['method']
args = msg_body['args']
context = dough_context.get_context(**args)
context.app = app
print "-" * 60
print "\033[0;31m" + method + "\033[0m:"
print args
method_func = getattr(api, method)
response = method_func(context, **args)
print "response:"
print response
except Exception, e:
print traceback.format_exc()
app.error(method + ": " + str(e))
cli_msg['code'] = 500
cli_msg['message'] = str(e)
response.update(cli_msg)
Expand Down
158 changes: 158 additions & 0 deletions bin/dough-client
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
#!/usr/bin/env python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright 2012 Sina Corporation
# All Rights Reserved.
# Author: YuWei Peng <pengyuwei@gmail.com>
#
# 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 sys
from collections import OrderedDict
from dough.client.dough_client import DoughClient


def show_usage():
print "usage:"
print "\tdough_client"
print "\tdough_client <param> <tenant_id> <time_from> [time_to] [period_hours]"
print "param:"
print "\t -m : query_monthly_report"
print "\t -d : query_report"
print "\t -u : unsubscribe_item"
print "\t -s : subscribe_item"
print "\t -l : get_load_balancers"
print "example:"
print "\t./dough-client -s user_id tenant_id resource_uuid resource_name region item item_type payment_type timestamp"
print "\t./dough-client -u user_id, tenant_id, region, resource_uuid, item, timestamp"
print "\t./dough-client -d 1adfb274fee24dbd96ea89b57d110fc5 2012-06-01T00:00:00 2012-07-01T00:00:00 days network resource_name"
print "\tget_all: ./dough-client -l user_id tenant_id"
print "\tget_by_uuid: ./dough-client -l user_id tenant_id load_balancer_uuid"
print "\tisrunning?: ./dough-client -l load_balancer_uuid"


def show_result(data):
print data


def show_report(data):
# print "ID=", data['data']['id']
data = data['data']['default']
line_total_sum = 0
quantity_sum = 0
count = 0

rs = OrderedDict(sorted(data.items(), key=lambda t: t[0]))
for k, i in rs.iteritems():
count += 1
print '-' * 60, count
print k
for kk, ii in i.iteritems():
print "\t", kk, ii
if kk == 'line_total':
line_total_sum += ii
elif kk == 'quantity':
quantity_sum += ii
print "total[", count, "] = ", line_total_sum


def main():
if len(sys.argv) == 2:
show_usage()
return
if len(sys.argv) == 3:
if sys.argv[2] in ['--help', "-h", "?"]:
show_usage()
return

data = None
client = DoughClient()

if len(sys.argv) == 12:
if sys.argv[2] == '-s':
user_id = sys.argv[3]
tenant_id = sys.argv[4]
resource_uuid = sys.argv[5]
resource_name = sys.argv[6]
region = sys.argv[7]
item = sys.argv[8]
item_type = sys.argv[9]
payment_type = sys.argv[10]
timestamp = sys.argv[11]
data = client.subscribe_item(user_id, tenant_id,
resource_uuid, resource_name,
region, item,
item_type, payment_type,
timestamp)
print data

if len(sys.argv) > 8:
if sys.argv[2] == '-d':
tenant_id = sys.argv[3]
time_from = sys.argv[4]
time_to = sys.argv[5]
period = sys.argv[6]
item_name = sys.argv[7]
resource_name = sys.argv[8]
data = client.query_report(tenant_id, time_from, time_to, period,
item_name, resource_name)
elif sys.argv[2] == '-u':
user_id = sys.argv[3]
tenant_id = sys.argv[4]
region = sys.argv[5]
resource_uuid = sys.argv[6]
item = sys.argv[7]
timestamp = sys.argv[8]
data = client.unsubscribe_item(user_id, tenant_id, region,
resource_uuid, item, timestamp)
print data
else:
pass

show_report(data)
elif len(sys.argv) > 6:
return
elif len(sys.argv) >= 3:
if sys.argv[2] == '-l':
if len(sys.argv) == 5:
user_id = sys.argv[3]
tenant_id = sys.argv[4]
data = client.load_balancer_get_all(user_id, tenant_id)
print data
elif len(sys.argv) == 6:
user_id = sys.argv[3]
tenant_id = sys.argv[4]
lb_id = sys.argv[5]
data = client.load_balancer_get(user_id, tenant_id, lb_id)
print data
elif len(sys.argv) == 4:
lb_id = sys.argv[3]
data = client.load_balancer_is_running(lb_id)
print data
else:
pass
elif sys.argv[2] == '-m':
if len(sys.argv) == 6:
tenant_id = sys.argv[3]
time_from = sys.argv[4]
time_to = sys.argv[5]
data = client.query_monthly_report(tenant_id, time_from, time_to)
show_result(data)
else:
pass
else:
pass


if __name__ == '__main__':
main()
31 changes: 22 additions & 9 deletions bin/dough-farmer
Original file line number Diff line number Diff line change
@@ -1,22 +1,23 @@
#!/usr/bin/env python
# -*- coding: utf8 -*-

import datetime
#import datetime
import sys
import time
import traceback
#import traceback

from dateutil.relativedelta import relativedelta
import zmq
#from dateutil.relativedelta import relativedelta
#import zmq

from nova import flags
from nova import log as logging
from nova import utils

from dough import billing
#from dough import billing
from dough import context as dough_context
from dough import db
from dough import exception
#from dough import exception
from kanyun.common.app import App

utils.default_flagfile(filename='/etc/dough/dough.conf')
flags.FLAGS(sys.argv)
Expand All @@ -26,9 +27,13 @@ FLAGS = flags.FLAGS

if __name__ == '__main__':
from dough.billing import api
app = App(conf="dough/dough.conf", name="farmer")
context = dough_context.get_admin_context()
context.app = app
while True:
current_time = utils.utcnow()
print "-" * 30, str(current_time)
app.info("------------ farming ----------")
subscriptions = list()
_subscriptions = db.subscription_get_all(context)
for sub in _subscriptions:
Expand Down Expand Up @@ -63,9 +68,17 @@ if __name__ == '__main__':
created_at, updated_at, expires_at, order_unit,
order_size, price, currency, region_name, item_name,
interval_unit, interval_size, is_prepaid) in subscriptions:
print "-" * 20
print "farming:subid=", subscription_id, "resid=", resource_uuid, "tid=", tenant_id
print "item_name=", item_name

action = getattr(api, status)
action(context, subscription_id, tenant_id, resource_uuid,
try:
action(context, subscription_id, tenant_id, item_name, resource_uuid,
created_at, updated_at, expires_at, order_unit,
order_size, price, currency, region_name,
item_name, interval_unit, interval_size, is_prepaid)
time.sleep(600)
interval_unit, interval_size, is_prepaid)
except Exception, e:
print e, subscription_id, item_name
print "<END>"
time.sleep(60 * 2)
Loading