/// <summary>发送告警</summary> /// <param name="groupName">告警组</param> /// <param name="webhook">告警Url</param> /// <param name="title">告警标题</param> /// <param name="message">告警消息</param> public static void SendAlarm(String groupName, String webhook, String title, String message) { XTrace.WriteLine(message); var group = AlarmGroup.FindByName(groupName); var hi = new AlarmHistory { GroupId = group?.Id ?? 0, Name = groupName, Success = true, Action = title, Content = message, Creator = Environment.MachineName, }; try { if (webhook.IsNullOrEmpty() && group != null && group.Enable) { webhook = group?.WebHook; } if (webhook.IsNullOrEmpty()) { throw new InvalidOperationException("未设置或未启用告警地址!"); } if (webhook.Contains("qyapi.weixin")) { hi.Category = "QyWeixin"; var weixin = new WeiXinClient { Url = webhook }; using var span = DefaultTracer.Instance?.NewSpan("SendWeixin", message); weixin.SendMarkDown(message); } else if (webhook.Contains("dingtalk")) { hi.Category = "DingTalk"; var dingTalk = new DingTalkClient { Url = webhook }; using var span = DefaultTracer.Instance?.NewSpan("SendDingTalk", message); dingTalk.SendMarkDown(title, message, null); } } catch (Exception ex) { hi.Success = false; hi.Content += Environment.NewLine + ex.ToString(); } hi.SaveAsync(); }
private void DoDingDing(DingTalkClient client) { if (client == null || client.UnionID.IsNullOrEmpty()) { return; } // 如果配置了企业级账号,可以获取更详细信息 var token = _ding_access_token; if (token.IsNullOrEmpty() || _ding_expire < DateTime.Now) { var ps = Parameter.FindAllByUserID(0).Where(e => e.Category == "钉钉").ToList(); var key = ps.FirstOrDefault(e => e.Name == "appkey"); if (key == null) { key = new Parameter { Category = "钉钉", Name = "appkey", Enable = true }; key.Insert(); } var secret = ps.FirstOrDefault(e => e.Name == "appsecret"); if (secret == null) { secret = new Parameter { Category = "钉钉", Name = "appsecret", Enable = true }; secret.Insert(); } _ding_access_token = null; if (!key.Value.IsNullOrEmpty() && !secret.Value.IsNullOrEmpty()) { token = _ding_access_token = DingTalkClient.GetToken(key.Value, secret.Value); } _ding_expire = DateTime.Now.AddSeconds(7200 - 60); } if (!token.IsNullOrEmpty()) { try { // 根据UnionId换取员工Id var userid = DingTalkClient.GetUseridByUnionid(token, client.UnionID); if (!userid.IsNullOrEmpty()) { // 钉钉Id一般不是自己设置的,很乱,不可取 //client.UserName = userid; client.GetUserInfo(token, userid); } } catch (AggregateException ex) { // 某些用户不是本团队成员,此处会抛出异常 if (!(ex.GetTrue() is ApiException)) { throw; } } } }
public TokenController(DingTalkClient dingTalkClient, IConfiguration configuration) { _dingTalkClient = dingTalkClient; _configuration = configuration; }