-module(kvs_adm). -compile(export_all). -include_lib("nitro/include/nitro.hrl"). -include_lib("kvs/include/cursors.hrl"). event(init) -> [ begin nitro:clear(X), self() ! {direct,X} end || X <- [writers,session,enode,disc,ram] ]; event(ram) -> nitro:update(ram, #span{body = ram(os:type())}); event(session) -> nitro:update(session, #span{body = n2o:sid()}); event(enode) -> nitro:update(enode, #span{body = lists:concat([node()])}); event(disc) -> nitro:update(disc, #span{body = hd(string:tokens(os:cmd("du -hs rocksdb"),"\t"))}); event({link,Id}) -> nitro:clear(feeds), lists:map(fun(T)-> nitro:insert_bottom(feeds, #panel{body=nitro:compact(T)}) end,kvs:feed(Id)); event(writers) -> [ nitro:insert_bottom(writers, #panel{body = [#link{body = Id, postback = {link,Id}}," (" ++ nitro:to_list(C) ++ ")"]}) || #writer{id = Id, count = C} <- lists:sort(kvs:all(writer)) ]; event(_) -> []. ram({_,darwin}) -> Mem = os:cmd("top -l 1 -s 0 | grep PhysMem"), [_,L,C,R]=string:tokens(lists:filter(fun(X) -> lists:member(X,"0123456789MG ") end, Mem)," "), lists:concat([nitro:meg(nitro:num(L)),"/",nitro:meg(nitro:num(L)+nitro:num(R))]); ram({_,linux}) -> [T,U,_,_,B,C] = lists:sublist(string:tokens(os:cmd("free")," \n"),8,6), Mem = (list_to_integer(U)- list_to_integer(B))+list_to_integer(C), lists:concat([nitro:meg(Mem * 1000),"/",nitro:meg(list_to_integer(T)*1000)]); ram(OS) -> nitro:compact(OS).