memcached の使用率をPythonから取得


ひさしぶりに2日休めたので、django、memcachedなんかを勉強してたら、
memcachedの利用状況をさくっと取得できるAPIがなさそうだったので作ってみました。
(memcache.py にあるのかも。。使われていそうな memcache.py かたっぱしから見てみたけどよくわからず)

やってることは telnet でつないで stats 発行してるだけ。Python力が1あがった!(気がする)

# -*- coding: utf-8 -*-
import telnetlib

class CheckMemcache():
    """memcacheの情報を取得する"""
    def __init__(self):
        self.host = ''
        self.port = 0
        self.stats = {}
    
    def connect(self, host, port):
        self.host = host
        self.port = port
        # stats 取得
        return self.setStats()

    def setStats(self):
        """telnet でログインして stats を発行"""
        try:
            tn = telnetlib.Telnet(self.host, self.port)
            tn.write("stats" + "\n")
            tn.write("quit" + "\n")
            # レスポンスを1行毎にListへ
            respList = tn.read_all().split("\n")
            # 各種情報を stats にセット
            for line in respList:
                state = line.split(" ")
                if(len(state) == 3):
                    self.stats[state[1]] = state[2]
            return True
        except:
            return False

    def getStats(self):
        return self.stats

    def getBytes(self):
        """現在の使用量を取得"""
        return self.stats['bytes']

    def getMaxBytes(self):
        """現在の最大割り当て量を取得"""
        return self.stats['limit_maxbytes']


# 使い方
if __name__ == '__main__':
    mem = CheckMemcache()
    if(mem.connect('localhost', 11211)):
        print "現在の使用量(bytes) -> " + mem.getBytes()
        print "最大割り当て量(bytes) -> " + mem.getMaxBytes()

        print "全情報:"
        stats = mem.getStats()
        for key,value in stats.iteritems():
            print "    " + key + " / " + value
    else:
        print "memcached への接続失敗"

コメントを残す

メールアドレスが公開されることはありません。

Top