Example #1
0
def memcacheds_group(group_id):
    memcacheds = db_session.query(Memcacheds).filter_by(group_id = group_id).order_by(Memcacheds.id).all()
    groups = db_session.query(Groups).filter_by(id = group_id).all()

    import socket
    _memcacheds = []
    group_names = {}
    for _group in groups :
        group_names[_group.id] = _group.name

    for _memcached in memcacheds :
        try :
            ip = _memcached.ip
            port = _memcached.port
            sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            sk.settimeout(0.01)
            address = (str(ip),int(port))
            status = sk.connect((address))
            status = 'ok'
        except Exception, e : 
            status = 'error'

        _memcacheds.append({"id":_memcached.id, 
            "ip":ip, 
            "port":port, 
            'status':status, 
            'group_id' : _memcached.group_id,
            'group_name' : group_names[_memcached.group_id] if group_names.has_key(_memcached.group_id) else  '/' 
            })  
Example #2
0
def memcached_do_add() :
    result = {}
    if not request.form.has_key('ip') :
        result['status'] = 'no ip address'
    elif not request.form.has_key('version') :
        result['status'] = 'no version selected'
    elif not request.form.has_key('port') :
        result['status'] = 'no port inputed'
    elif not request.form.has_key('memory') :
        result['status'] = 'no memory inputed'
    elif not request.form.has_key('group') :
        result['status'] = 'no group selected'
    else :
        ip = request.form['ip'].strip().encode('utf8')
        version = request.form['version']
        port = str(request.form['port'].strip())
        memory = str(request.form['memory'].strip())
        group = str(request.form['group'])
        param = request.form['param'].strip().encode('utf8')
        isstart = str(request.form['isstart'])
        _memcached = db_session.query(Memcacheds).filter_by(ip = ip,port = port).first()
        if not _memcached :
            if not param :
                data = os.popen("bash -l /var/www/memcache_cloud/memcached_add.sh " + ip + " " + version + " " + port + " " + memory + " " + isstart).read()
            else :
                data = os.popen("bash -l /var/www/memcache_cloud/memcached_add.sh " + ip + " " + version + " " + port + " " + memory + " " + isstart + " '" + param + "'").read()
            result['status'] = data
            if (isstart == "1" and data == "add success\n") or isstart == "0" :
                memcache = Memcacheds(ip=ip, port=port, memory=memory, status=1, group_id=group, version=version, parameters=param)
                db_session.add(memcache)
                db_session.commit()
        else :
            result['status'] = 'the memcached is already added'
    return json.dumps(result)
Example #3
0
def memcached_reset_stats(memcached_id) :
    _memcached = db_session.query(Memcacheds).filter_by(id = memcached_id).first()
    addr =  _memcached.ip + ':' + str(_memcached.port)
    print addr

    client = Client([addr])
    client.reset_stats()

    return redirect(url_for(".memcached_detail", memcached_id = memcached_id))
Example #4
0
def groups_index():
    from sqlalchemy import func
    groups = db_session.query(Groups, func.sum(Memcacheds.memory).label('group_total_memory'),func.count(Memcacheds.ip).label('memcached_count')) \
        .outerjoin(Memcacheds, Memcacheds.group_id == Groups.id) \
        .group_by(Groups.id).all()
    stats_hit = {}
    stats_useage = {}
    for group in groups :
        group_get = 0
        group_hit = 0
        group_useage = 0
        group_free = 0
        group_total = 0 
        memcacheds = db_session.query(Memcacheds).filter_by(group_id = group.Groups.id).all()
        for memcached in memcacheds :
            try :
                addr = memcached.ip + ":" + str(memcached.port)
                client = Client([addr])
                stats = client.get_stats()[0][1]
                stats['cmd_get'] = int(stats['cmd_get'])
                stats['get_hits'] = int(stats['get_hits'])
                stats['bytes'] = float(stats['bytes'])
                stats['limit_maxbytes'] = float(stats['limit_maxbytes'])
                stats['free'] = float(stats['limit_maxbytes'] - stats['bytes'])
            except Exception, e :
                continue
            group_get += int(stats['cmd_get'])
            group_hit += float(stats['get_hits'])
            group_useage += round((stats['bytes'] / 1024 / 1024 / 1024),2)
            group_free += round((stats['free'] / 1024 / 1024 / 1024),2)
            group_total += round((stats['limit_maxbytes'] / 1024 / 1024 / 1024),2)
        if (group_total != 0) :
            group_use_per = round((group_useage / group_total * 100),2)
            group_free_per = round((group_free / group_total * 100),2)
        else :
            group_use_per = "/"
            group_free_per = "/"
        stats_useage[group.Groups.id] = {"useage": group_useage, "free": group_free, "use_per": group_use_per, "free_per": group_free_per}
        if (group_get != 0) :
            stats_hit[group.Groups.id] = {"hit": round(((group_hit / group_get) * 100),2)}
        else :
            stats_hit[group.Groups.id] = {"hit": "/"}
Example #5
0
def memcached_check() :
    result = {}
    if not request.form.has_key('ip') :
        result['status'] = '0'
    elif not request.form.has_key('port') :
        result['status'] = '0'
    else :
        ip = request.form['ip'].strip().encode('utf8')
        port = str(request.form['port'].strip())
        _memcached = db_session.query(Memcacheds).filter_by(ip = ip,port = port).first()
        if not _memcached :
            result['status'] = '1'
        else :
            result['status'] = '0'
    return json.dumps(result)
Example #6
0
def get_hit_data() :
    result = []
    hits_data = {}
    m_id = int(request.form['m_id'])
    the_date = str(request.form['the_date'])
    get_date = int(time.mktime(time.strptime(the_date + ' 00:00:00', '%Y-%m-%d %H:%M:%S')))
    next_date = get_date + 24 * 3600
    hits_history = db_session.query(Logs).filter(Logs.m_id == m_id,Logs.log_type == 1,Logs.time >= get_date,Logs.time < next_date).all()
    for hits_history in hits_history :
        hits_data['dater'] = str(time.strftime('%H.%M',time.localtime(hits_history.time)))
        hits_data['hit_range'] = str(hits_history.num)
        hits_data['get_num'] = str(hits_history.get)
        #hits_data += "{date:'" + str(time.strftime('%H.%M',time.localtime(_hits_history.time))) + "',value:" + str(_hits_history.num) + "},"
        result.append(hits_data.copy())
    return json.dumps(result)
Example #7
0
def memcached_do_edit() :
    result = {}
    memcached_id = int(request.form['memcached_id'])
    ip = request.form['ip'].strip().encode('utf8')
    version = int(request.form['version'])
    port = int(request.form['port'].strip())
    memory = int(request.form['memory'].strip())
    group = int(request.form['group'])
    param = request.form['param'].strip().encode('utf8')
    _memcached = db_session.query(Memcacheds).filter_by(id = memcached_id).first()
    _memcached.ip = ip
    _memcached.version = version
    _memcached.port = port
    _memcached.memory = memory
    _memcached.group_id = group
    _memcached.parameters = param
    db_session.commit()
    result['status'] = 'Edit success!'
    return json.dumps(result)
Example #8
0
def group_do_add() :
    result = {}

    if not request.form.has_key('name') :
        result['status'] = 'error'
        result['message'] = 'please input name'
    else :
        name = request.form['name']
        count = db_session.query(Groups).filter_by(name = name).count()
        if (count > 0) :
            result['status'] = 'error'
            result['message'] = 'group ' + name + ' is existed!'
        else :
            group = Groups(name)
            db_session.add(group)
            db_session.commit()
            result['status'] = 'ok'
            result['message'] = 'add successed. group id is ' + str(group.id)

    return json.dumps(result)
Example #9
0
def memcached_add() :
    groups = db_session.query(Groups).all()
    group_names = {}
    for _group in groups :
        group_names[_group.id] = _group.name
    return render_template('mc/memcached_add.html', group_names = group_names)
Example #10
0
    _memcached.port = port
    _memcached.memory = memory
    _memcached.group_id = group
    _memcached.parameters = param
    db_session.commit()
    result['status'] = 'Edit success!'
    return json.dumps(result)

@mod.route('/memcached-<memcached_id>-stop', methods=['GET', 'POST'])
def memcached_stop(memcached_id) :
    try :
        memcached_id = int(memcached_id)
    except Exception, e :
        return 'invalid memcached id'

    _memcached = db_session.query(Memcacheds).filter_by(id = memcached_id).first()
    result = {}
    if not _memcached :
        result['status'] = "the memcached not exist"
    else :
        data = os.popen("bash -l /var/www/memcache_cloud/memcached_stop.sh " + _memcached.ip + " " + str(_memcached.port) + " " + str(_memcached.memory) + " " + str(_memcached.version) + " '" + str(_memcached.parameters) + "'").read()
        result['status'] = data
        _memcached.status = 0
        db_session.commit()
    return json.dumps(result)

@mod.route('/memcached-<memcached_id>-delete', methods=['GET', 'POST'])
def memcached_delete(memcached_id) :
    result = {}
    try :
        memcached_id = int(memcached_id)
Example #11
0
def index():
    return render_template("mc/index.html", 
            group_count = db_session.query(Groups).count(),
            host_count = db_session.query(Memcacheds).group_by(Memcacheds.ip).count(),
            memcached_count = db_session.query(Memcacheds).count())
Example #12
0
# -*- coding: utf-8 -*-

from mc.db.db import db_session
from mc.model import *
from cache.cache_server import Client
import json
import os
import time


memcacheds = db_session.query(Memcacheds).order_by(Memcacheds.group_id).order_by(Memcacheds.id).all()

logs_dir = "/var/www/memcache_cloud/logs/"

for memcached in memcacheds :
    ip = memcached.ip
    port = memcached.port
    addr = str(ip) + ":" + str(port)
    try :
        client = Client([addr])
        stats = client.get_stats()[0][1]
        current_get = stats['cmd_get']
        current_hit = stats['get_hits']
        mid = memcached.id
        log_file = logs_dir + str(memcached.id) + "_data"
        if os.path.isfile(log_file) :
            filehandler = open(log_file,'r')
            old_data = filehandler.readline().rstrip()
            old_data_arr = old_data.split(' ')
            if len(old_data_arr) == 2 :
                old_get = old_data_arr[0]
Example #13
0
def hosts_index():
    from sqlalchemy import func
    hosts = db_session.query(Memcacheds.ip, func.count(Memcacheds.ip).label('memcached_count')).group_by(Memcacheds.ip).all()
    return  render_template('mc/host_index.html', hosts = hosts)