예제 #1
0
def initiate():
    # Boot first machines if not active:
    stack = openstack()
    backends = stack.backends()

    # Gathering first data
    data = {}
    data['acu'] = hastats.get_backend_cum_requests()['stot']
    data['diff'] = 0
    data['diffpt'] = 0
    data['date'] = datetime.datetime.now()
    data['active'] = len(
        stack.active_backends())  #len(hastats.get_backends_up())
    data['haactive'] = len(hastats.get_backends_up())
    data['needed'] = None
    data['epoch'] = (datetime.datetime.now() - epoch_start).seconds
    metrics.append(data)
    print metrics
    time.sleep(sleeptime)
    last = data
    data = {}
    data['acu'] = hastats.get_backend_cum_requests()['stot']
    data['diff'] = int(
        (float(data['acu']) - float(last['acu'])) / float(sleeptime))
    data['diffpt'] = data['diff'] * sleeptime
    data['date'] = datetime.datetime.now()
    data['needed'] = needed_servers(acu=data['acu'], diff=data['diff'])
    data['active'] = len(
        stack.active_backends())  #len(hastats.get_backends_up())
    data['haactive'] = len(hastats.get_backends_up())
    data['epoch'] = (datetime.datetime.now() - epoch_start).seconds
    metrics.append(data)
    time.sleep(sleeptime)
예제 #2
0
def initiate():
    # Boot first machines if not active:
    stack = openstack()
    backends = stack.backends()

    # Gathering first data
    data = {}
    data['acu'] = hastats.get_backend_cum_requests()['stot']
    data['diff'] = 0
    data['diffpt'] = 0
    data['date'] = datetime.datetime.now()
    data['active'] = len(stack.active_backends())#len(hastats.get_backends_up())
    data['haactive'] = len(hastats.get_backends_up())
    data['needed'] = None
    data['epoch'] = (datetime.datetime.now()-epoch_start).seconds
    metrics.append(data)
    print metrics
    time.sleep(sleeptime)
    last = data
    data = {}
    data['acu'] = hastats.get_backend_cum_requests()['stot']
    data['diff'] = int((float(data['acu']) - float(last['acu'])) / float(sleeptime))
    data['diffpt'] = data['diff'] * sleeptime
    data['date'] = datetime.datetime.now()
    data['needed'] = needed_servers(acu=data['acu'], diff=data['diff'])
    data['active'] = len(stack.active_backends())#len(hastats.get_backends_up())
    data['haactive'] = len(hastats.get_backends_up())
    data['epoch'] = (datetime.datetime.now()-epoch_start).seconds
    metrics.append(data)
    time.sleep(sleeptime)
예제 #3
0
def main():
    # Starting the first time
    # getting current cum connections
    try:
        if not metrics:
            print("Gathering initial data...")

            # Gathering first data
            initiate()

        while True:
            current = new_metrics(hastats.get_backend_cum_requests()['stot'])
            print metrics[-1]
            print "Needed servers: %s" % str(
                needed_servers(diff=current['diff']))

            # What to do? Scale up/down or are we happy?
            stack = openstack()
            active_backends = stack.active_backends()
            up_backends = hastats.get_backends_up()

            needed = needed_servers(diff=current['diff'])
            if needed > len(active_backends):
                print "Scaling up"
                scale_up(needed - len(active_backends))
            elif needed < len(active_backends):
                print "Scaling down"
                if not scale_down(Needed=needed):
                    print "Lowest number"
            else:
                # Sleeping
                print "Sleeping one more round"

            if update_conf():
                print "HAproxy config reloaded"
                print ha_last_reload

            for line in hastats.get_stat_backends():
                print line['svname'] + ', ' + line['status']

            time.sleep(sleeptime)

    except KeyboardInterrupt:
        write_data()
예제 #4
0
def main():
    # Starting the first time
    # getting current cum connections
    try:
        if not metrics:
            print("Gathering initial data...")

            # Gathering first data
            initiate()

        while True:
            current = new_metrics(hastats.get_backend_cum_requests()['stot'])
            print metrics[-1]
            print "Needed servers: %s" % str(needed_servers(diff=current['diff']))

            # What to do? Scale up/down or are we happy?
            stack = openstack()
            active_backends = stack.active_backends()
            up_backends = hastats.get_backends_up()

            needed = needed_servers(diff=current['diff'])
            if needed > len(active_backends):
                print "Scaling up"
                scale_up(needed-len(active_backends))
            elif needed < len(active_backends):
                print "Scaling down"
                if not scale_down(Needed=needed):
                    print "Lowest number"
            else:
                # Sleeping
                print "Sleeping one more round"

            if update_conf():
                print "HAproxy config reloaded"
                print ha_last_reload

            for line in hastats.get_stat_backends():
                print line['svname'] + ', ' + line['status']

            time.sleep(sleeptime)

    except KeyboardInterrupt:
        write_data()
예제 #5
0
def new_metrics(current_cumulated, hareset=False):
    global ha_reloaded
    global ha_last_reload
    current = {}
    current['acu'] = current_cumulated
    current['date'] = datetime.datetime.now()

    if ha_reloaded:
        last_cumulated = 0
        difference = int(ceil((float(current_cumulated) - float(last_cumulated)) \
                / float((current['date'] - ha_last_reload).seconds)))
        diffpt = int(difference) * (current['date'] - ha_last_reload).seconds

    try:
        print "Current new cumulated connections: %s" % str(current_cumulated)
        print "Calculation: float(%s) - float(%s) / float(%s-%s.seconds (%s))" % \
                (str(current_cumulated), metrics[-1]['acu'], str(current['date']), str(metrics[-1]['date']),\
                str((current['date'] - metrics[-1]['date']).seconds))

        if ha_reloaded:
            current['diff'] = difference
            current['diffpt'] = diffpt
            ha_reloaded = False
        else:
            current['diff'] = int(ceil((float(current_cumulated) - float(metrics[-1]['acu'])) \
                    / float((current['date']-metrics[-1]['date']).seconds)))
            current['diffpt'] = current['diff'] * (current['date'] -
                                                   metrics[-1]['date']).seconds
    except ZeroDivisionError:
        current['diff'] = 0

    stack = openstack()
    current['needed'] = needed_servers(acu=current['acu'],
                                       diff=current['diff'])
    current['active'] = len(
        stack.active_backends())  #len(hastats.get_backends_up())
    current['haactive'] = len(hastats.get_backends_up())
    current['epoch'] = (datetime.datetime.now() - epoch_start).seconds

    metrics.append(current)
    return current
예제 #6
0
def new_metrics(current_cumulated, hareset=False):
    global ha_reloaded
    global ha_last_reload
    current = {}
    current['acu'] = current_cumulated
    current['date'] = datetime.datetime.now()

    if ha_reloaded:
        last_cumulated = 0
        difference = int(ceil((float(current_cumulated) - float(last_cumulated)) \
                / float((current['date'] - ha_last_reload).seconds)))
        diffpt = int(difference) * (current['date'] - ha_last_reload).seconds

    try:
        print "Current new cumulated connections: %s" % str(current_cumulated)
        print "Calculation: float(%s) - float(%s) / float(%s-%s.seconds (%s))" % \
                (str(current_cumulated), metrics[-1]['acu'], str(current['date']), str(metrics[-1]['date']),\
                str((current['date'] - metrics[-1]['date']).seconds))

        if ha_reloaded:
            current['diff'] = difference
            current['diffpt'] = diffpt
            ha_reloaded = False
        else:
            current['diff'] = int(ceil((float(current_cumulated) - float(metrics[-1]['acu'])) \
                    / float((current['date']-metrics[-1]['date']).seconds)))
            current['diffpt'] = current['diff'] * (current['date']-metrics[-1]['date']).seconds
    except ZeroDivisionError:
        current['diff'] = 0

    stack = openstack()
    current['needed'] = needed_servers(acu=current['acu'], diff=current['diff'])
    current['active'] = len(stack.active_backends())#len(hastats.get_backends_up())
    current['haactive'] = len(hastats.get_backends_up())
    current['epoch'] = (datetime.datetime.now()-epoch_start).seconds

    metrics.append(current)
    return current