public AppsSyncInfo GetTenantSyncInfo() { var info = new AppsSyncInfo(); Tenant tenant = GetTenant(); info.TenantId = tenant.TenantId; try { var tenantApps = ServicesRuntime.AllApplications.Applications.FindAll(app => app.TenantId.CompareTo(repoTenantId) == 0).ToList(); tenantApps = tenantApps.OrderBy(app => app.Name).ToList(); var AllTenantApps = new AllApplications() { Applications = tenantApps, VersionsDelta = ServicesRuntime.AllApplications.VersionsDelta, AppsHashCode = string.Empty }; var appsJson = JsonConvert.SerializeObject(AllTenantApps); info.Apps = JsonConvert.DeserializeObject <AllApplications>(appsJson); info.Apps.Applications = info.Apps.Applications; StringBuilder signature = new StringBuilder(); foreach (var app in info.Apps.Applications) { signature.Append(app.Name + "_"); var instances = app.Instances.OrderBy(i => i.InstanceId).ToList(); foreach (var inst in instances) { signature.Append(inst.InstanceId + "_" + inst.Status + "_" + inst.OverriddenStatus + "_"); } } var sigStr = signature.ToString(); if (!string.IsNullOrEmpty(sigStr)) { info.MD5Hash = sigStr.GetMd5Hash(); } else { info.MD5Hash = string.Empty; } return(info); } catch (Exception err) { Console.WriteLine("GetTenantSyncInfo ERROR - ", err.Message); } return(null); }
public bool StartSyncProcess(Tenant tenant, List <DiscoveryPeer> peers, AppsSyncInfo apps, KeysSyncInfo keys, int seconds) { PersistencyInfo synchInfo = null; // save sync state infos for tenant lock (SyncInfos){ synchInfo = SyncInfos.SingleOrDefault(s => s.SynchTenant.TenantId.CompareTo(tenant.TenantId) == 0); if (synchInfo == null) { synchInfo = new PersistencyInfo(); synchInfo.SynchTenant = tenant; SyncInfos.Add(synchInfo); } } synchInfo.SynchStarted = true; synchInfo.LastSynchStarterId = Program.InstanceConfig.ServerInstanceID; synchInfo.SyncStart = DateTime.Now; synchInfo.SyncEnd = DateTime.Now.AddSeconds(seconds); synchInfo.Apps = JsonConvert.DeserializeObject <AllApplications>(JsonConvert.SerializeObject(apps.Apps)); synchInfo.KeyValues = JsonConvert.DeserializeObject <List <StoreKeyValue> >(JsonConvert.SerializeObject(keys.Keys)); synchInfo.Peers = JsonConvert.DeserializeObject <List <DiscoveryPeer> >(JsonConvert.SerializeObject(peers)); synchInfo.PeerSyncResponses = new List <PeerSyncResponse>(); synchInfo.AppsMD5 = apps.MD5Hash; synchInfo.KeysMD5 = keys.MD5Hash; // send MQTT PERSISTENCY_SYNC message if (!string.IsNullOrEmpty(synchInfo.AppsMD5)) { var syncMessage = new MQTTPersistencySyncAppsMessageContent() { TenantId = tenant.TenantId, PeerId = Program.InstanceConfig.ServerInstanceID, AppsMd5Hash = synchInfo.AppsMD5 }; var toIds = new List <string>(); toIds.Add("ALL"); var jsonMessage = JsonConvert.SerializeObject(syncMessage); jsonMessage = jsonMessage.Replace("\"", "'"); var mqttMessage = new MQTTMessage() { FromInstanceId = Program.InstanceConfig.ServerInstanceID, ToInstancesIds = toIds, Type = "PERSISTENCY_SYNC_APPS", Message = jsonMessage }; Program.mqttService.SendMQTTMessageToAll(synchInfo.SynchTenant.TenantId, mqttMessage); } if (!string.IsNullOrEmpty(synchInfo.KeysMD5)) { var syncMessage = new MQTTPersistencySyncKeysMessageContent() { TenantId = tenant.TenantId, PeerId = Program.InstanceConfig.ServerInstanceID, KeysMd5Hash = synchInfo.KeysMD5 }; var toIds = new List <string>(); toIds.Add("ALL"); var jsonMessage = JsonConvert.SerializeObject(syncMessage); jsonMessage = jsonMessage.Replace("\"", "'"); var mqttMessage = new MQTTMessage() { FromInstanceId = Program.InstanceConfig.ServerInstanceID, ToInstancesIds = toIds, Type = "PERSISTENCY_SYNC_KEYS", Message = jsonMessage }; Program.mqttService.SendMQTTMessageToAll(synchInfo.SynchTenant.TenantId, mqttMessage); } return(true); }