cron 表达式的定义与解析

  • 用  ncrontab 库解析
  • 如何安装  ncrontab

如图

在 package manage console 输入

即可

 

  • 安装完成后, 可用以下程序测试

程序功能是:  在 2000-1-1  和 2001-1-1 之间, print 所有符合  “0 12 * */2 Mon” 的日期

  • 各种 ncrontab  表达式

需要注意的是: ncrontab 和 cron 是有区别的, 但是ncrontab 也能满足大多数要求

ncrontab 的表达式意思和例子见:

https://code.google.com/archive/p/ncrontab/wikis/CrontabExpression.wiki

https://code.google.com/archive/p/ncrontab/wikis/CrontabExamples.wiki

 

 

How to use List> as datagridview ‘s datasource

 

 

From

https://forums.asp.net/t/1470261.aspx?Use+List+List+string+as+GridView+DataSource

 

 

用C#做一个集中调存储过程并发送邮件的程序

  • UI

c# modern UI 参考

https://www.youtube.com/watch?v=nLfzH4xOVqo&t=0s&index=2&list=PLQ9wcil_P4A54PNtduum8SDilt3cfDnoi


datagridview UI

https://www.youtube.com/watch?v=XyBeTGixw50

  • cron表达式

以前用 NCrontab 库

后来改为 crontrigger

crontrigger 的用法见 :

http://www.notesoflyang.com/?p=1357

  • Logic

a) 用户可自定义task , 包括调用哪个server  , DB name , 存储过程name , 调用时间(cron 表达式) ,标题 , 定义的方式为 自己写入 xml 文件

例子:1

 

b)  当task 执行时间到达时 ,自动执行 sql SP 并把返回的结果写html 格式的文档发送出去。

邮件标题 显示从哪个服务器取的, 什么时间取的 , 列标题。  报告的名字, 订阅的人都有谁

c)有 log 记录task 成功还是失败

  • 各部分功能

1  调存储过程并返回table

数据库暂时用这个测试

调用无参sp   :  [sp_RptTest]

2 将返回的table生成 html 报表,然后发邮件 ,生成的报表类似信用卡账单

3  : 如果 winform 的 FormBorderStyle  = none , 怎么使其移动

https://stackoverflow.com/questions/1241812/how-to-move-a-windows-form-when-its-formborderstyle-property-is-set-to-none

 

4: 当某一个存储过程执行时间过长, 要显示 executing ….

要显示 task 的状态 , 包括  waiting , sending , send fail , send success

5: 可以单独任务启动

6: 可以看单独任务的历史记录

7: 程序能回到任务栏

8 :

  • UI 配色

红色  178, 8, 55

黑色  41 39 40

按钮色  background:#f0f0f0

天蓝色 background: #c9dff0

  • knowledge base

a) email 不能带 js , 也不能带外部 css , 要用inline style

b) 如果想从 gmail  发 , 需要 gmail  允许不够安全的应用:已启用

 

  • 测试 , 以 24机器的daily SOA monitor 为例 :

此任务包括4个stpes

Unbill Daily Check   —- EXEC sp_monitor_soaunbill_4 , 存储过程内部发邮件

Losing Money Report   —  是一个查询后发邮件的存储过程

email generator   —   exec sp_soamon_email_gen  邮件

sms generator   —   exec sp_soamon_sms_gen  —   不知是否需要

Yesterday Low ASR Country Alert  —  是一个查询后发邮件的存储过程

Refresh Sales Contact   —- update SOABalMonitorList
set EmailReceipt = isnull ((select Email from SalesContact B where B.SaleName=(select [SmartBilling].[dbo].f_GetTraderInDate(SOABalMonitorList.CarrierId,getdate()))) ,’ran.zhang@voicehub.com.my’)

 

只需要实现 1,2,5 step ,  将第一步改为 exec [sp_monitor_soaunbill_4_ly]    , 在 SmartBilling_Addon 数据库

此存储过程耗时14分钟

将第二部改为  [sp_Losing_money_ly]  , 在 SmartBilling 数据库

第五步改为 [sp_yesterday_low_ASR_ly_email]  , 在 SmartBilling 数据库

24 密码为   smart.88967aa

 

  • 有用的网站:

a) 从图片取色

 

b)

 

  • 问题:

1—-  user control 怎么加到 form

tools—>option—>window forms design—>general—>automatically populate toolbox  == true

如果还不行, 关 vs , 重新打开

2 —  online regular expression

https://regex101.com/r/pD3xY6/1

 

3 — 如何同时启动多个task,并等待结束

http://www.notesoflyang.com/?p=1271

 

4 — 有时候 gmail 发不出去 , 这是因为google 限制了在未被识别的机器上登陆 , 需要自己修改设置

来自 :

https://stackoverflow.com/questions/51834750/asp-net-smtp-gmail-failed

 

  • 测试用例 (在  office tbhost1)

1: 同时启动4个task,都调用的同一个存储过程 ,

结果, 成功收到了4个邮件

2:

 

 


2019-2-12

在24新建 sp_SOA_Yesterday_Low_ASR_Alert_LY

内容为

 

邮件标题是

Country with Low ASR Yesterday (svr 24 sg main)

发给:

accounts@worldhubcom.com;sales@worldhubcom.com;noc@worldhubcom.com;liang.xue@worldhubcom.cn;sp.kor@worldhubcom.com;chloe.ang@worldhubcom.com

 

 


2019-2-14

在 24 机器上新建存储过程  sp_monitor_soabal_checker_4_LY

是 uncheck_bill 的后续

邮件标题是

SOA Over Threshhold(Main Bill Server)

发给:

mzcw2011@sina.cn;accounts@worldhubcom.com;liang.xue@worldhubcom.com;billing.expandnet@gmail.com;th.ang@worldhubcom.com;sp.kor@worldhubcom.com;chloe.ang@worldhubcom.com

 

把 24机器的soa daily monitor —> uncheck bill 任务停止

 

以上过程在 234 重复一遍


2019-02-18

在 24 机器上新建存储过程 sp_monitor_daily_overdue_LY

每天早八点执行

数据库 addon

邮件标题是   OverDue EveryDay(24 Main)

发给 :  accounts@worldhubcom.com;ryanchwa@yahoo.com;sales@worldhubcom.com;perry.tan@worldhubcom.com;sp.kor@worldhubcom.com;sp.ling@worldhubcom.com

 

对应24机器的job  —   daily overdue rpt


 

在 24 机器上新建存储过程 sp_monitor_dailycash_LY  (先不要)

因为没看到发邮件的部分 , 这个存储过程需要发邮件吗 ?

 

 


列名字如果只是date,没time , 显示时只有date

asr百分比 ,  acd 2位小数

xml 文件里 task name 和 标题头不可重复

 


2019-02-28

 

在 103.244.191.235 机器上新建

新建 sp_monitor_asr_in_hour_LY

此存储过程写数据进 [MonitorASR_InHourly_Detail] 表

—————-

新建 sp_monitor_asr_out_hour_LY

—————-

新建 [sp_monitor_acd_in_hour_LY]

—————-

新建 [sp_monitor_acd_out_hour_LY]

—————-

新建 [sp_monitor_cdr_cache_LY]

—————-

新建 [sp_TwoHourMonitor_asr_in_hour_LY]

 

 


如何在存储过程里面 union

 

https://stackoverflow.com/questions/4746192/conditional-union-in-stored-procedure

 

 


235 machine  create  [sp_monitor_asr_in_hour_Test_LY2019]

完成

[sp_monitor_asr_out_hour_LY]

[sp_monitor_asr_in_hour_LY]

[sp_monitor_acd_in_hour_LY]

[sp_monitor_acd_out_hour_LY]

 

  • 备注 :   发邮件的程序放在  103.244.191.226  ,  name — slidewindow

2019-07-19 因为 smartbilling 的 rpt_daily 表不再存在,

需要改动  sp_Losing_money_ly

用 smartbillingReport 的  dbo.[Hyyyymmdd] 代替 smartbilling 的 rpt_daily

 

 

  • 备注

2019-8-26

程序运行在  103.244.191.226    4899

把原先配置文件中的  sbb1 全部改为 sbb2

又因为  smartbilling 的 rpt_daily 表不再存在,

用 smartbillingReport 的  dbo.[Hyyyymmdd] 代替 smartbilling 的 rpt_daily

具体修改是 , 在 sbb2 新建

这四个存储过程 ,是从 sbb1 抄来的,  但是 用 smartbillingReport 的  dbo.[Hyyyymmdd] 代替 smartbilling 的 rpt_daily

加了这四句

 

————–以下是  2019-08-28 的测试sql ,  在  103.244.191.233