#!/usr/bin/env python
# -*- conding: utf-8 -*-

import os
import sys
import shlex
from subprocess import Popen, PIPE

work_dir = "/var/tmp"

class Process(object):
	args = []
	'''memcached rc script'''
	def __init__(self,name,
					program,
					work_dir,
					args=[]
				):
		self.name = name
		self.program = program
		self.args += []
		self.work_dir = work_dir
	
	def init(self):
 		if not os.path.exists(self.work_dir):
			os.mkdir(self.work_dir)
			os.chdir(self.work_dir)

	def _get_status(self):
		pass

	def _pidFile(self):
		'''/var/tmp/memcached/memcached.pid'''
		return os.path.join(self.work_dir,"%s.pid" % self.name)

	def _writePid(self):
		with open(self._pidFile(), 'w') as fd:
			fd.write(str(self.pid))
	
	def parser_args(self):
		config = readConfig()
		if 'USER' in config:
			self.args += ['-u', config['USER']]
		if 'PORT' in config:
			self.args += ['-p', config['PORT']]
		if 'MAXCONN' in config:
			self.args += ['-c', config['MAXCONN']]
		if 'CACHESIZE' in config:
			self.args += ['-m', config['CACHESIZE']]
		if 'DAEMON' in config:
			self.args += ['-d', config['DAEMON']]
		if 'PID' in config:
			self.args += ['-p', config['PID']]
		print self.args
		return self.args

	def start(self):
		p_check = Popen(['pidof', 'memcached'], stdout=PIPE)
		if p_check.stdout.read():
			print "memcached is already running..."
			sys.exit()
		self.init()
		self.args = self.parser_args()
		cmd = [self.program] + self.args
		p = Popen(cmd, stdout=PIPE)
		self.pid = p.pid
		self._writePid()
		print "memcached start DONE"

	def _readPid(self):
		if os.path.exists(self._pidFile()):
			with open(self._pidFile()) as fd:
				return int(fd.read())
			
	def _checkPid(self, pid):
		return os.path.exists('/proc/%s' % pid)

	def stop(self):
		pid = self._readPid()
		if self._checkPid(pid):
			os.kill(pid, 15)
			os.remove(self._pidFile())
			print "memcached stop DONE"
	
	def status(self):
		if self._checkPid(self._readPid()):
			print "memcached is running..."
		else:
			print "memcached not running"

	def restart(self):
		self.stop()
		self.start()

def readConfig():
	f = open('/etc/sysconfig/memcached')
	lines = f.readlines()
	return dict([i.strip().replace('"','').split('=') for i in lines])

def main():
	name = 'memcached'
	program = '/usr/bin/memcached'
	#args = '-u memcached -p 11211'
	wd = '/var/tmp/memcached'
	pm = Process(name, program, wd)
	try:
		m = sys.argv[1]
	except IndexError,e:
		print "options error"
		sys.exit()
	if sys.argv[1] == 'start':
		pm.start()
	elif sys.argv[1] == 'stop':
		pm.stop()
	elif sys.argv[1] == 'status':
		pm.status()
	elif sys.argv[1] == 'restart':
		pm.restart()
		

if __name__ == '__main__':
	main()