private Dictionary <string, List <string> > AddMicroServiceSettings(Models.PalaceInfo palaceInfo, Models.MicroServiceSettings settings) { ((List <Models.MicroServiceSettings>)palaceInfo.MicroServiceSettingsList).Add(settings); palaceInfo.LastConfigurationUpdate = DateTime.Now; SaveConfiguration(palaceInfo); return(new Dictionary <string, List <string> >()); }
private void LoadMicroServices(Models.PalaceInfo palaceInfo) { var configFileName = System.IO.Path.Combine(PalaceServerSettings.MicroServiceConfigurationFolder, $"{palaceInfo.Key}.json"); if (System.IO.File.Exists(configFileName)) { var content = System.IO.File.ReadAllText(configFileName); var list = System.Text.Json.JsonSerializer.Deserialize <List <Models.MicroServiceSettings> >(content); palaceInfo.MicroServiceSettingsList = list; } }
internal void RemoveMicroServiceSettings(Models.PalaceInfo palaceInfo, string serviceName) { var existing = palaceInfo.MicroServiceSettingsList.FirstOrDefault(i => i.ServiceName == serviceName); if (existing != null) { ((List <Models.MicroServiceSettings>)palaceInfo.MicroServiceSettingsList).Remove(existing); palaceInfo.LastConfigurationUpdate = DateTime.Now; SaveConfiguration(palaceInfo); } }
private void SaveConfiguration(Models.PalaceInfo palaceInfo) { var configFileName = System.IO.Path.Combine(PalaceServerSettings.MicroServiceConfigurationFolder, $"{palaceInfo.Key}.json"); var content = System.Text.Json.JsonSerializer.Serialize(palaceInfo.MicroServiceSettingsList, new System.Text.Json.JsonSerializerOptions { WriteIndented = true, }); if (System.IO.File.Exists(configFileName)) { System.IO.File.Copy(configFileName, $"{configFileName}.bak", true); } System.IO.File.WriteAllText(configFileName, content); }
public Models.PalaceInfo GetOrCreatePalaceInfo(string userAgent, string userHostAddress) { var pi = new Models.PalaceInfo(); FillWithUserAgent(pi, userAgent, userHostAddress); _palaceInfoDictionary.TryGetValue(pi.Key, out var palaceInfo); if (palaceInfo == null) { LoadMicroServices(pi); palaceInfo = pi; _palaceInfoDictionary.TryAdd(pi.Key, pi); } else { palaceInfo.LastHitDate = DateTime.Now; } return(palaceInfo); }
internal Dictionary <string, List <string> > SaveMicroServiceSettings(Models.PalaceInfo palaceInfo, Models.MicroServiceSettings settings) { var validation = Validate(settings); if (!validation.IsValid) { return(validation.BrokenRules); } Dictionary <string, List <string> > result = null; var existing = palaceInfo.MicroServiceSettingsList.FirstOrDefault(i => i.ServiceName == settings.ServiceName); if (existing == null) { result = AddMicroServiceSettings(palaceInfo, settings); } else { result = UpdateMicroServiceSettings(palaceInfo, settings); } return(result); }
private void FillWithUserAgent(Models.PalaceInfo palaceInfo, string userAgent, string userHostAddress) { if (string.IsNullOrWhiteSpace(userAgent)) { return; } var pattern = @"Palace/(?<version>[^\(]*)\((?<os>[^;]*);(?<machineName>[^;]*);(?<hostName>[^;]*)\)"; var regexp = new System.Text.RegularExpressions.Regex(pattern); var match = regexp.Match(userAgent); if (!match.Success) { return; } palaceInfo.Os = match.Groups["os"].Value.Trim(); palaceInfo.MachineName = match.Groups["machineName"].Value.Trim(); palaceInfo.HostName = match.Groups["hostName"].Value.Trim(); palaceInfo.Version = match.Groups["version"].Value.Trim(); palaceInfo.Ip = userHostAddress; }
private Dictionary <string, List <string> > UpdateMicroServiceSettings(Models.PalaceInfo palaceInfo, Models.MicroServiceSettings settings) { var existing = palaceInfo.MicroServiceSettingsList.FirstOrDefault(i => i.ServiceName == settings.ServiceName); bool isDirty = false; if (existing.AdminServiceUrl != settings.AdminServiceUrl) { isDirty = true; } existing.AdminServiceUrl = settings.AdminServiceUrl; if (existing.AlwaysStarted != settings.AlwaysStarted) { isDirty = true; } existing.AlwaysStarted = settings.AlwaysStarted; if (existing.Arguments != settings.Arguments) { isDirty = true; } existing.Arguments = settings.Arguments; if (existing.InstallationFolder != settings.InstallationFolder) { isDirty = true; } existing.InstallationFolder = settings.InstallationFolder; if (existing.MainAssembly != settings.MainAssembly) { isDirty = true; } existing.MainAssembly = settings.MainAssembly; if (existing.PackageFileName != settings.PackageFileName) { isDirty = true; } existing.PackageFileName = settings.PackageFileName; if (existing.PalaceApiKey != settings.PalaceApiKey) { isDirty = true; } existing.PalaceApiKey = settings.PalaceApiKey; if (existing.ServiceName != settings.ServiceName) { isDirty = true; } existing.ServiceName = settings.ServiceName; if (existing.SSLCertificate != settings.SSLCertificate) { isDirty = true; } existing.SSLCertificate = settings.SSLCertificate; if (existing.InstanceCount != settings.InstanceCount) { isDirty = true; } existing.InstanceCount = settings.InstanceCount; if (existing.MaxWorkingSetLimitBeforeAlert != settings.MaxWorkingSetLimitBeforeAlert) { isDirty = true; } existing.MaxWorkingSetLimitBeforeAlert = settings.MaxWorkingSetLimitBeforeAlert; if (existing.MaxWorkingSetLimitBeforeRestart != settings.MaxWorkingSetLimitBeforeRestart) { isDirty = true; } existing.MaxWorkingSetLimitBeforeRestart = settings.MaxWorkingSetLimitBeforeRestart; if (existing.ThreadLimitBeforeAlert != settings.ThreadLimitBeforeAlert) { isDirty = true; } existing.ThreadLimitBeforeAlert = settings.ThreadLimitBeforeAlert; if (existing.ThreadLimitBeforeRestart != settings.ThreadLimitBeforeRestart) { isDirty = true; } existing.ThreadLimitBeforeRestart = settings.ThreadLimitBeforeRestart; if (existing.NotRespondingCountBeforeAlert != settings.NotRespondingCountBeforeAlert) { isDirty = true; } existing.NotRespondingCountBeforeAlert = settings.NotRespondingCountBeforeAlert; if (existing.NotRespondingCountBeforeRestart != settings.NotRespondingCountBeforeRestart) { isDirty = true; } existing.NotRespondingCountBeforeRestart = settings.NotRespondingCountBeforeRestart; if (isDirty) { palaceInfo.LastConfigurationUpdate = DateTime.Now; SaveConfiguration(palaceInfo); } return(new Dictionary <string, List <string> >()); }
string GetColor(Models.PalaceInfo host, Models.ExtendedRunningMicroServiceInfo msinfo) { return(null); }