Beispiel #1
0
        /// <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();
        }
Beispiel #2
0
        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;
 }