免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: shijiang1130
打印 上一主题 下一主题

[算法] erlang open_port用法 [复制链接]

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
11 [报告]
发表于 2014-07-01 21:44 |只看该作者
本帖最后由 shijiang1130 于 2014-07-01 21:44 编辑

  1. ,再改一版
  2. -module(my_ping).
  3. -behaviour(gen_event).
  4. -compile(export_all).

  5. t_ping()->
  6.         gen_event:start({local,monitor}),
  7.         gen_event:add_handler(monitor,my_ping,"warning.txt"),
  8.         P = open_port({spawn,"c:/windows/system32/PING.exe -t www.chinaunix.net"},[binary,exit_status]),
  9.         loop(P).

  10. loop(P)->
  11.         receive
  12.                 {P,{data,Data}} ->
  13.                         case re:run(Data,<<"(\\d+)ms\s">>,[{capture,[1],list}]) of
  14.                                {match,[Res]} -> io:format("~n~p",[Res]),
  15.                                                            Num=erlang:list_to_integer(Res),
  16.                                                            average(Num),
  17.                                                            alert(Num);
  18.                                _  -> ok
  19.                          end,
  20.                 loop(P)
  21.         end.

  22. alert(Num)->
  23.         case Num > 10 of
  24.         true ->
  25.                 %io:format("!!!! warning"),
  26.                 gen_event:notify(monitor,[erlang:integer_to_list(Num)]);
  27.         false -> ok
  28.         end.

  29. average(Num)->
  30.         case get(count) of
  31.         undefined->
  32.                 put(count,1),
  33.                 put(total,Num);
  34.         _ ->
  35.                 exception
  36.         end,
  37.         C=get(count),
  38.         T=get(total),
  39.         P=T/C,
  40.         io:format(" => average is: ~p~n",[P]),
  41.         put(count,C+1),
  42.         put(total,T+Num).
  43. %%% gen_event part       
  44. init(File)->
  45.         {ok,Fd} = file:open(File,write),
  46.         {ok,Fd}.
  47. handle_event(Event,Fd)->
  48.         {{Year,Month,Day},{Hour,Min,Second}}=calendar:local_time(),
  49.         Time_stamp = lists:concat([Year,"-",Month,"-",Day," ",Hour,":",Min,":",Second]),
  50.         io:format(Fd,"[Warning] ~p ~p~n",[Time_stamp,Event]),
  51.         {ok,Fd}.
  52. terminate(_Args,Fd)->
  53.         file:close(Fd).               
复制代码

论坛徽章:
27
水瓶座
日期:2014-08-22 21:06:34程序设计版块每日发帖之星
日期:2015-11-25 06:20:0015-16赛季CBA联赛之新疆
日期:2015-12-19 19:05:48IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:31IT运维版块每日发帖之星
日期:2015-12-25 06:20:3315-16赛季CBA联赛之上海
日期:2016-04-15 19:51:31程序设计版块每日发帖之星
日期:2016-04-17 06:23:29程序设计版块每日发帖之星
日期:2016-04-23 06:20:00程序设计版块每日发帖之星
日期:2016-05-26 06:20:00每日论坛发贴之星
日期:2016-05-26 06:20:0015-16赛季CBA联赛之辽宁
日期:2017-02-16 23:59:47
12 [报告]
发表于 2014-07-01 21:45 |只看该作者
"39" => average is: 13.965909090909092

"136" => average is: 14.247191011235955

"87" => average is: 15.6

"7" => average is: 16.384615384615383

"15" => average is: 16.282608695652176

"12" => average is: 16.268817204301076

"10" => average is: 16.22340425531915

"9" => average is: 16.157894736842106

"9" => average is: 16.083333333333332

"9" => average is: 16.010309278350515

"9" => average is: 15.938775510204081

"13" => average is: 15.868686868686869

"8" => average is: 15.84

"8" => average is: 15.762376237623762

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
13 [报告]
发表于 2014-07-02 08:22 |只看该作者
感觉port就是不得已而为之的手段.
erlang的内置库里居然没有icmp的支持
https://github.com/msantos/gen_icmp

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
14 [报告]
发表于 2014-07-02 09:43 |只看该作者
回复 9# shijiang1130

稍稍做了一点改动.

一个是 正则 改成了 ([0-9.]+)\s*ms\s*$ , 因为我是在Linux上运行, 得到的结果是个浮点数.

然后, 把下面的 list_to_integer 改成了 list_to_float , 这样才能支持浮点数.


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP