diff --git a/junbi.cgi b/junbi.cgi index 041d0f3..49e9766 100755 --- a/junbi.cgi +++ b/junbi.cgi @@ -7,6 +7,9 @@ from datetime import date as Date import codecs +user = 'whaov' +password = 'Tey12ufw' + intent = None date = None period = None @@ -40,10 +43,10 @@ def _dec(s): # {{{ return codecs.decode(s,'rot13') # }}} -def weekdiff(d): # {{{ +def _weekdiff(d): # {{{ _, cday, _ = d.isocalendar() _, tday, _ = (Date.today()+timedelta(1)).isocalendar() - if tday > cday: + if tday >= cday: return tday - cday else: return 52+ tday -cday @@ -57,11 +60,11 @@ sfrom, _ = period.split('/') d = datetime.strptime(sfrom, "%Y-%m-%d") f = Date(d.year, d.month, d.day) - diff = weekdiff(f) + diff = _weekdiff(f) if diff > 0: week = "?week=%d" % diff if date: - diff = weekdiff(date) + diff = _weekdiff(date) if diff > 0: week = "?week=%d" % diff today = date.strftime("%-m/%d") @@ -69,8 +72,6 @@ today = "" url = 'http://ist.ksc.kwansei.ac.jp/~tutimura/cgi-bin/lab/' + week - user = 'whaov' - password = 'Tey12ufw' headers ={} headers["authorization"] = "Basic " + (_dec(user) + ":" + _dec(password)).encode("base64")[:-1] req = urllib2.Request(url=url, headers=headers) @@ -96,6 +97,7 @@ tmp += u"," + s + u"が" + j[0].text + u"のようです。" if tmp: day = re.sub('/', u'月', days[i].text) + day = re.sub('\(', u'日(', day) line += day line += tmp @@ -124,11 +126,14 @@ if ok[x] != u'成功': s += x+ u"番," if s == u"": - s = "全部成功です。やった!" + if ok: + s = "全部成功です。やった!" + else: + s = "データがまだ無いようです" else: s += "が失敗しています" - return "センサー" + s + return s # }}} def _search(name): # {{{ @@ -178,19 +183,89 @@ return s # }}} +def _formatdate(date): # {{{ + week="月火水木金土日" + return str(date.month) + "月"+ str(date.day) +"日("+week[date.weekday()] + ")" +# }}} def log(name): # {{{ - url = 'http://ist.ksc.kwansei.ac.jp/~tutimura/cgi-bin/lab/?room=HSJ-' + name.rjust(2,'0') - user = 'whaov' - password = 'Tey12ufw' - headers ={} - headers["authorization"] = "Basic " + (_dec(user) + ":" + _dec(password)).encode("base64")[:-1] - req = urllib2.Request(url=url, headers=headers) - res = urllib2.urlopen(req) + import os + import re + import locale - tree = lxml.html.etree.HTML(res.read().decode('utf-8')) - return "わかりません" + logdir = "/var/log/httpd/" + logfiles = [fname for fname in os.listdir(logdir) if fname.startswith("access_log-")] + + logfiles.sort() + logfiles.append('access_log') + + ipaddr = "172.29.119." + str(int(name)+150) + + errlog = [] + error_count = 0 + lines = [] + for fname in logfiles[-8:]: + with open(logdir + fname) as f: + line = [l for l in f.readlines() if "logonoff" in l and l.startswith(ipaddr)] + line = [re.match(r'.*\[(\d+/\w+/\d+:\d+:\d+:\d+).*logonoff\?(.*) HTTP', l).groups() for l in line] + lines += [(datetime.strptime(date, '%d/%b/%Y:%H:%M:%S'), action) for date, action in line] + + w_up_flag, l_up_flag, on_flag = False, False, True + dailyerr = u"" + + date, action = lines[0] + if action == "shutdownL": + lines = lines[1:] + + prev = "" + for datet, action in lines: + date = Date(*datet.timetuple()[:3]) + if prev != date: + if prev: + if not on_flag: + dailyerr = "反応なし." + dailyerr + if l_up_flag or w_up_flag: + dailyerr = "ONのみ." + dailyerr + if dailyerr: + errlog.append(_formatdate(prev)+ dailyerr) + prev += timedelta(1) + while prev != date: + if prev.weekday() != 6: + errlog.append(_formatdate(prev) + u"に反応なし.") + prev += timedelta(1) + prev = date + w_up_flag, l_up_flag, on_flag = False, False, False + dailyerr = "" + + if action == "amt" and not u"AMT" in dailyerr: dailyerr += u"AMT動作." + elif action == "cleanup" and not u"電源" in dailyerr: dailyerr += u"電源落ち." + elif action == "novga" and not u"VGA" in dailyerr: dailyerr += u"VGA喪失." + elif action == "shutdownL": + if not l_up_flag: + dailyerr += u"OFFのみ." + l_up_flag = False + elif action == "shutdown": + if not w_up_flag: + dailyerr += u"OFFのみ." + w_up_flag = False + elif action == "startupL": + l_up_flag = True + on_flag = True + elif action == "startup": + w_up_flag = True + on_flag = True + + errlog.reverse() + s = " ".join(errlog) + if not s: + s = "最近は何もないようです" + return s #}}} + +## +## vvv main sequence vvv +## + get_parameters() answer = "" @@ -215,7 +290,15 @@ u"なにかおかしいです -- ")) -output = {"speech": answer} +output = {"speech": answer, + "contexts": [ + {"name": "monimoni", + "parameters": { + "text": answer, + }, + "lifespan": 5 + } + ]} d = json.dumps(output, ensure_ascii=False) print "Content-Type: application/json; charset=UTF-8\n"