Skip to content

Instantly share code, notes, and snippets.

@ak1211
ak1211 / gist:2284e91042186423c3c6
Last active March 2, 2016 12:33
これHTMLのひな形
html = """
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load('visualization', '1', {{'packages':['timeline']}});
google.setOnLoadCallback(drawChart);
function drawChart() {{
@ak1211
ak1211 / gist:3a9db551575074f88595
Created March 2, 2016 12:32
これHTMLのひな形にデータを入れている
buf = []
for num, item in enumerate (start_session_logs):
st = item
tm = item["terminate log"]
text = "[ '{0}', '{1}'".format (1+num, st["User"])
text = text + ", new Date({0})".format (st["DateTime"].strftime ('%Y, %m, %d, %H, %M, %S'))
if tm:
text = text + ", new Date({0})".format (tm["DateTime"].strftime ('%Y, %m, %d, %H, %M, %S'))
text = text + "],"
buf.append (text)
@ak1211
ak1211 / gist:fd954c370b4765e675f2
Created March 2, 2016 12:45
日時フィールドが変だから,後ろの有効な値をとる
def toDateTime (log_datetime):
date = (log_datetime.split(' '))[3:]
return datetime.datetime.strptime (' '.join (date), "%b %d %H:%M:%S %Z")
@ak1211
ak1211 / gist:61db9759de4b04d0a033
Created March 2, 2016 12:46
ログのメッセージフィールドから必要な値をとる
def extract_start_session_from_log(line):
sep = line.rstrip().split (': ')
result = {}
result["terminate log"] = None
result["line"] = line
#
result["Message"] = sep[2]
result["Class"] = sep[1]
result["DateTime"] = toDateTime (sep[0])
#
@ak1211
ak1211 / gist:4a7432c12a582861391f
Created March 2, 2016 12:48
標準入力から来た行から開始ログ,終了ログを見つけて,それぞれ覚えておく
start_session_logs = []
terminate_session_logs = []
for line in sys.stdin:
if re.search (r'%ASA-[^:]+?-113039:', line):
start_session_logs.append (
extract_start_session_from_log (line))
#
if re.search (r'%ASA-[^:]+?-113019:', line):
terminate_session_logs.append (
@ak1211
ak1211 / gist:72787235c64f7e4501c7
Created March 2, 2016 12:49
覚えておいた開始ログ,終了ログの対応関係を調べる
for start in start_session_logs:
term = next(itertools.ifilter(lambda it:it["DateTime"] >= start["DateTime"] and it["IP"] == start["IP"], terminate_session_logs), None)
if term:
start["terminate log"] = term
term["start log"] = start
@ak1211
ak1211 / gist:75f8bb1f92a519daab9a
Created March 2, 2016 12:51
対応の評価は開始ログの時間より終了ログが後であることとIPアドレスが一致すること
term = next(itertools.ifilter(lambda it:it["DateTime"] >= start["DateTime"] and it["IP"] == start["IP"], terminate_session_logs), None)
@ak1211
ak1211 / gist:142626a4f30c16d738b0
Created March 2, 2016 12:52
パイプを用意して,出力パイプをファイルディスクリプタ3番にする(もし'3>'の指定が無ければエラーになる)
pipR, pipW = os.pipe ()
os.close (pipR)
os.dup2 (3, pipW)
unterminated_file = os.fdopen (pipW, "w")
@ak1211
ak1211 / gist:2fedee584dafa73b9f9d
Created March 2, 2016 12:55
対応する終了ログがない開始ログは,次回実行時に処理するためにその行をファイルディスクリプタ3番に送る
for item in itertools.ifilter(lambda it:it["terminate log"] == None, start_session_logs):
print >> unterminated_file, item["line"]
@ak1211
ak1211 / gist:52b8c5f23a62936f213a
Created March 2, 2016 13:04
対応する開始ログがない終了ログは,標準エラー出力に送る
for item in itertools.ifilter(lambda it:it["start log"] == None, terminate_session_logs):
print >> sys.stderr, "This record,"
print >> sys.stderr, item["line"] ,
print >> sys.stderr, " has no relationship!"