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