/// <summary> /// 更新在线状态 /// </summary> /// <param name="app"></param> /// <param name="clientId"></param> /// <param name="ip"></param> /// <param name="token"></param> /// <returns></returns> public static ConfigOnline UpdateOnline(AppConfig app, String clientId, String ip, String token) { var online = GetOrAddClient(clientId) ?? GetOrAddClient(ip, token); online.AppId = app.Id; //online.Name = app.Name; online.Category = app.Category; online.Token = token; online.PingCount++; if (online.CreateIP.IsNullOrEmpty()) { online.CreateIP = ip; } online.Creator = Environment.MachineName; var appOnline = AppOnline.FindByToken(token); if (appOnline != null) { online.UpdateInfo(app, appOnline); } online.SaveAsync(3_000); return(online); }
public PeerModel[] GetPeers() { var app = Session["App"] as App; var olts = AppOnline.FindAllByAppID(app.ID); return(olts.Select(e => e.ToModel()).ToArray()); }
//每10s清除一次UpdateTime超10分钟未更新的 private static void ClearOnline(Object state) { var ls = AppOnline.GetOnlines(10); foreach (var item in ls) { item.Delete(); } }
AppOnline GetOnline(IApp app, INetSession ns) { if (Session["AppOnline"] is AppOnline online) { return(online); } var ip = ns.Remote.Host; var ins = ns.Remote.EndPoint + ""; online = AppOnline.FindByInstance(ins) ?? new AppOnline { CreateIP = ip }; online.AppID = app.ID; online.Instance = ins; return(online); }
AppOnline GetOnline(App app, INetSession ns) { if (Session["AppOnline"] is AppOnline online) { return(online); } var ip = ns.Remote.Host; var ins = ns.Remote.EndPoint + ""; online = AppOnline.FindByClient(ins) ?? new AppOnline { CreateIP = ip }; online.AppId = app.Id; online.Client = ins; return(online); }
/// <summary>更新信息</summary> /// <param name="app"></param> /// <param name="online"></param> public void UpdateInfo(AppConfig app, AppOnline online) { //PingCount++; //AppId = app.Id; //Name = app.Name; if (online != null) { Name = online.Name; Version = online.Version; UserName = online.UserName; ProcessId = online.Id; ProcessName = online.ProcessName; StartTime = online.StartTime; } //Creator = Environment.MachineName; //SaveAsync(); }
public PeerModel[] GetPeers() { var olts = AppOnline.FindAllByAppID(_App.ID); return(olts.Select(e => e.ToModel()).ToArray()); }
public TraceResponse Report([FromBody] TraceModel model, String token) { var builders = model?.Builders; if (model == null || model.AppId.IsNullOrEmpty()) { return(null); } var ip = HttpContext.GetUserHost(); if (ip.IsNullOrEmpty()) { ip = ManageProvider.UserHost; } var set = Setting.Current; // 新版验证方式,访问令牌 App ap = null; if (!token.IsNullOrEmpty() && token.Split(".").Length == 3) { ap = _service.DecodeToken(token, set); //if (ap == null || ap.Name != model.AppId) throw new InvalidOperationException($"授权不匹配[{model.AppId}]!=[{ap?.Name}]!"); if (ap == null) { throw new InvalidOperationException($"授权不匹配[{model.AppId}]!=[{ap?.Name}]!"); } } App.UpdateInfo(model, ip); var clientId = model.ClientId; if (clientId.IsNullOrEmpty()) { var(jwt, ex) = _service.DecodeToken(token, set.TokenSecret); clientId = jwt?.Id; } AppOnline.UpdateOnline(ap, clientId, ip, token, model.Info); // 该应用的追踪配置信息 var app = AppTracer.FindByName(model.AppId); if (app == null) { app = new AppTracer { Name = model.AppId, DisplayName = model.AppName, Enable = set.AutoRegister, }; app.Save(); } // 校验应用 if (app == null || !app.Enable) { throw new Exception($"无效应用[{model.AppId}/{model.AppName}]"); } // 插入数据 if (builders != null && builders.Length > 0) { Task.Run(() => ProcessData(app, model, ip, builders)); } // 构造响应 var rs = new TraceResponse { Period = app.Period, MaxSamples = app.MaxSamples, MaxErrors = app.MaxErrors, Timeout = app.Timeout, //Excludes = app.Excludes?.Split(",", ";"), }; // Vip客户端。高频次大样本采样,10秒100次,逗号分割,支持*模糊匹配 if (app.IsVip(model.ClientId)) { rs.Period = 10; rs.MaxSamples = 100; } // 新版本才返回Excludes,老版本客户端在处理Excludes时有BUG,错误处理/ if (!model.Version.IsNullOrEmpty()) { rs.Excludes = app.Excludes?.Split(",", ";"); } return(rs); }