from time import sleep

from WebKit.ThreadedAppServer import ThreadAbortedError
from AdminSecurity import AdminSecurity


class Sleep(AdminSecurity):

	def title(self):
		return 'Sleep'

	def writeContent(self):
		wr = self.writeln
		field = self.request().field
		try:
			duration = int(field("duration"))
		except (KeyError, ValueError):
			duration = 0
		maxRequestTime = self.application().server().setting(
			'MaxRequestTime', 0) or 0
		wr('''<form action="Sleep" method="post">
<input type="submit" name="action" value="Sleep">
<input type="text" name="duration" value="%d"
size="6" maxlength="12" style="text-align: right"> seconds
</form>''' % (duration or int(maxRequestTime*2) or 120))
		if duration:
			wr('<p>Sleeping %d seconds...</p>' % duration)
			self.response().flush(0)
			duration *= 8
			count = 0
			try:
				while count < duration:
					# Don't block on system call or this thread can't be killed
					sleep(0.125)
					count += 1
				wr('<p>Time over, woke up!</p>')
			except ThreadAbortedError, e:
				duration = int((count+4)/8)
				wr('<p style="color:red">Sleep aborted with %s after %d seconds!</p>'
					% (e.__class__.__name__, duration))
			wr('<p>Request %d has been processed.</p>'
				% self.request().requestID())
