static void Main(string[] args) { StringBuilder sb = new StringBuilder(); OssVodBranchWS VodMan = new OssVodBranchWS(); try { VodMan.Credentials = new NetworkCredential("IPTVServices", "P23R@vor", "BRMSK"); VodMan.Url = "http://78.107.199.132/ossVodBranchWS/branch.asmx"; FailedResourceInformation frInform = new FailedResourceInformation(); frInform = VodMan.GetFailedResourceInformation(); sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Number of FAILED assets: " + frInform.AssetServerMaps.Count()); int i = 0; foreach (AssetServerMap assetServerMap in frInform.AssetServerMaps) { sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + i + " " + assetServerMap.ProviderAssetId + " " + assetServerMap.ProviderId); Console.WriteLine(i + " " + assetServerMap.ProviderAssetId + " " + assetServerMap.ProviderId); if (assetServerMap.ProviderId == "CatchUp") { i++; Console.WriteLine("Undeploy " + assetServerMap.ProviderAssetId); sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Undeploy " + assetServerMap.ProviderAssetId); try { VodMan.AddClusterJob(assetServerMap.Title, assetServerMap.ProviderAssetId, assetServerMap.ProviderId, assetServerMap.VServerDiskInformation.VServerInformation.ClusterId, "", "", JobType.Delete, DateTime.Now.AddMinutes(1), null ); } catch (Exception e) { Console.WriteLine("Error " + e.ToString()); sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Error " + e.ToString()); } Thread.Sleep(1000); } if (i > 50) { break; } } //Console.ReadLine(); } catch (Exception e) { Console.WriteLine("Error " + e.ToString()); sb.AppendLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + "Error " + e.ToString()); } finally { string filePath = @".\Logfile_" + DateTime.Now.ToString("yyyy-MM-dd") + ".log"; File.AppendAllText(filePath, sb.ToString()); sb.Clear(); Console.WriteLine("filepath " + filePath); //Console.ReadLine(); } }
static void Main(string[] args) { try { // CheckMDS(); // Console.ReadLine(); int MaxAsset = Properties.Settings.Default.MaxWorkingAsset; Guid nullGuid = Guid.Parse("00000000-0000-0000-0000-000000000000"); Log("Start Program. MaxWorking assets = " + MaxAsset); OssVodBranchWS VodBranch = new OssVodBranchWS(); VodBranch.Credentials = new NetworkCredential(Properties.Settings.Default.User, Properties.Settings.Default.Password, Properties.Settings.Default.Domain); VodBranch.Url = Properties.Settings.Default.VodBranch; Log("Check status of Clusters"); List <Cluster> BadClusters = new List <Cluster>(); Cluster[] Clusters = VodBranch.GetAllClusterInfo(); foreach (Cluster cluster in Clusters) { //new VServer[] vservers = VodBranch.GetAllVServerForCluster(cluster.ClusterId); foreach (VServer vserver in vservers) { if (vserver.Status != VServerStatus.Available) { BadClusters.Add(cluster); Log("Cluster " + cluster.Name + " is not good. VServer " + vserver.Name + " has status: " + vserver.Status); break; } } } FailedResourceInformation FailedResourceInformation = VodBranch.GetFailedResourceInformation(); Log("The count Failed Assets is " + FailedResourceInformation.AssetServerMaps.Count()); Console.WriteLine("The count Failed Assets is " + FailedResourceInformation.AssetServerMaps.Count()); int i = 0; foreach (AssetServerMap AssetServerMap in FailedResourceInformation.AssetServerMaps) { // Check info about AssetServerMap string ProviderID = AssetServerMap.ProviderId; string ProviderAssetID = AssetServerMap.ProviderAssetId; Guid ClusterID = AssetServerMap.VServerDiskInformation.VServerInformation.ClusterId; Guid JobGuid = new Guid(); Console.WriteLine(ProviderAssetID + " in cluster " + AssetServerMap.VServerDiskInformation.VServerInformation.ClusterName + " Assetstatus " + AssetServerMap.Status); Log(ProviderAssetID + " in cluster " + AssetServerMap.VServerDiskInformation.VServerInformation.ClusterName + " Assetstatus " + AssetServerMap.Status); AssetInfo[] AssetsInfo = VodBranch.GetAssetServerMap(ProviderID, ProviderAssetID, ClusterID, nullGuid, null); if (AssetsInfo.Length < 1) { Log(ProviderAssetID + ": In cluster " + AssetServerMap.VServerDiskInformation.VServerInformation.ClusterName + " we have only " + AssetsInfo.Length + " asset(s)"); Console.WriteLine(ProviderAssetID + ": In cluster " + AssetServerMap.VServerDiskInformation.VServerInformation.ClusterName + " we have only " + AssetsInfo.Length + " asset(s)"); bool TryToDo = true; foreach (Cluster BadCluster in BadClusters) { // We want to know the health of Cluster if (AssetServerMap.VServerDiskInformation.VServerInformation.ClusterId == BadCluster.ClusterId) { TryToDo = false; break; } } if (TryToDo) { // It needed for make a Job JobType jb = new JobType(); string BackendName = ""; string AssetName = ""; string SourceLocation = ""; Random rnd = new Random(); int rndMinutes = rnd.Next(2, 10); DateTime ScheduleTime = DateTime.Now; ScheduleTime = ScheduleTime.AddMinutes(rndMinutes); AssetInfo[] JobAssetsInfo = VodBranch.GetClusterAssetJobMapByAssetID(0, 0, true, ProviderAssetID); foreach (AssetInfo JobAssetInfo in JobAssetsInfo) { if (JobAssetInfo.ClusterId == ClusterID) { Log(ProviderAssetID + ": The Job was " + JobAssetInfo.JobType); jb = JobAssetInfo.JobType; BackendName = JobAssetInfo.Backend; AssetName = JobAssetInfo.AssetName; SourceLocation = JobAssetInfo.SourceLocation; break; } } switch (jb) { case (JobType.Copy): Console.WriteLine("Copy this Assets"); JobGuid = VodBranch.NewClusterJob(AssetName, ProviderAssetID, ProviderID, ClusterID, BackendName, SourceLocation, jb, ScheduleTime, null, 0, 3); Log(ProviderAssetID + " : We will try to Copy to " + AssetServerMap.VServerDiskInformation.VServerInformation.ClusterName + " Job guid " + JobGuid); // After Job ended we need to delete "Bad" price in MDS !!! It is important!!! // Thread oThread = new Thread(CheckJobExecution); object JobID = JobGuid.ToString(); oThread.Start(JobID); i = i + 1; break; case (JobType.Delete): Console.WriteLine("Delete this Assets"); JobGuid = VodBranch.NewClusterJob(AssetName, ProviderAssetID, ProviderID, ClusterID, BackendName, SourceLocation, jb, ScheduleTime, null, 0, 3); Log(ProviderAssetID + " : We will Delete this asset. Job guid " + JobGuid + " it will start at " + ScheduleTime.ToString("yyyy-MM-dd HH:mm:ss")); i = i + 1; break; } //Console.WriteLine(ProviderAssetID + ": We will try to Deploy on " + AssetServerMap.VServerDiskInformation.VServerInformation.ClusterName); } } else if (AssetServerMap.Status == AssetMapStatusCode.Unavailable) { // Try to catch unavailable status. Here we only redeploy asset JobType jb = new JobType(); string BackendName = ""; string AssetName = ""; string SourceLocation = ""; Random rnd = new Random(); int rndMinutes = rnd.Next(2, 10); DateTime ScheduleTime = DateTime.Now; ScheduleTime = ScheduleTime.AddMinutes(rndMinutes); AssetInfo[] JobAssetsInfo = VodBranch.GetClusterAssetJobMapByAssetID(0, 0, true, ProviderAssetID); foreach (AssetInfo JobAssetInfo in JobAssetsInfo) { if (JobAssetInfo.ClusterId == ClusterID) { Log(ProviderAssetID + ": The Job was " + JobAssetInfo.JobType); jb = JobAssetInfo.JobType; BackendName = JobAssetInfo.Backend; AssetName = JobAssetInfo.AssetName; SourceLocation = JobAssetInfo.SourceLocation; break; } } Console.WriteLine("Copy this Assets"); JobGuid = VodBranch.NewClusterJob(AssetName, ProviderAssetID, ProviderID, ClusterID, BackendName, SourceLocation, JobType.Copy, ScheduleTime, null, 0, 3); Log(ProviderAssetID + " : We will try to Copy to " + AssetServerMap.VServerDiskInformation.VServerInformation.ClusterName + " Job guid " + JobGuid); Thread oThread = new Thread(CheckJobExecution); object JobID = JobGuid.ToString(); oThread.Start(JobID); i = i + 1; } if (i > MaxAsset) { break; } //AssetServerMap.Status -- //GetAllVServerForCluster -- check status servers } } catch (Exception e) { Log("Error :" + e.Message); Console.WriteLine("Error :" + e.Message); } finally { Log("End Program"); Console.WriteLine("End Program"); Console.ReadLine(); } }