示例#1
0
 public UsersHandler(IUsersRepository repository,
                     IRetentionService service,
                     IMapper mapper)
 {
     _repository = repository;
     _service    = service;
     _mapper     = mapper;
 }
        public void SetUp()
        {
            var service = new Mock <IRetentionService>();

            service.Setup(x => x.GetInstance(It.IsAny <string>())).Returns <string>(text =>
            {
                var instance = new Mock <IRetentionInstance>();
                instance.Setup(x => x.Call()).Returns(text);
                return(instance.Object);
            });

            endpoint = TinyService.Host(service.Object).WithCleanupInterval(TimeSpan.FromSeconds(2)).AtEndpoint("test");
            client   = TinyClient.Create <IRetentionService>("test");
        }
示例#3
0
        static int Main(string[] args)
        {
            try
            {
                Console.WriteLine("User profile path detected: " + Environment.GetEnvironmentVariable(Environment.SpecialFolder.UserProfile.ToString()));
                Console.WriteLine("Checking for existence of WMI namespace and class");
                try
                {
                    createOrUpdateWmi();
                }
                catch (Exception e)
                {
                    if (e.Message.StartsWith("Access denied"))
                    {
                        Console.WriteLine("Access to WMI denied, you must run this application as administrator");
                        return(1);
                    }
                    else
                    {
                        throw e;
                    }
                }

                string hashedPassword = null;
                if (args.Length > 0 && args[0] != null)
                {
                    foreach (string arg in args)
                    {
                        if (arg.ToLower().StartsWith("password="******"Using ImageManager password supplied from command line (" + unhashedPassword.Length + " characters)");
                            PasswordHash hash = new PasswordHash();
                            hashedPassword = hash.ComputeAsBase64(unhashedPassword);
                        }
                    }
                }
                if (hashedPassword == null)
                {
                    Console.WriteLine("Looking for ImageManager hashed password from settings file");
                    DirectoryInfo testFolder = new DirectoryInfo("C:\\windows\\SysWOW64\\config\\systemprofile\\AppData\\local\\StorageCraft_Technology_C");
                    if (!testFolder.Exists)
                    {
                        testFolder = new DirectoryInfo("C:\\windows\\SysWOW64\\config\\systemprofile\\AppData\\local\\StorageCraft_Technology_C");
                        if (!testFolder.Exists)
                        {
                            Console.WriteLine("Unable to locate StorageCraft_Technology_C under the local system profile path. Check that the ImageManager service is running under the Local System account and that a password has been set.");
                            return(1);
                        }
                    }

                    Console.WriteLine("Found StorageCraft data folder at " + testFolder.FullName);
                    DirectoryInfo[] directories = testFolder.GetDirectories();
                    if (directories.Length == 0)
                    {
                        Console.WriteLine("Error: No subdirectory found under " + testFolder.Name);
                        return(1);
                    }
                    Console.WriteLine("Navigating down first subdirectory of " + testFolder.Name);
                    DirectoryInfo imageManagerDataFolder = new DirectoryInfo(directories[0].FullName);
                    directories = imageManagerDataFolder.GetDirectories();
                    if (directories.Length == 0)
                    {
                        Console.WriteLine("Error: No subdirectory found under " + testFolder.Name);
                        return(1);
                    }
                    Console.WriteLine("Navigating down newest subdirectory of " + imageManagerDataFolder.Name);
                    IEnumerator <DirectoryInfo> orderedDirectories = directories.OrderByDescending(d => d.Name).GetEnumerator();
                    orderedDirectories.MoveNext();
                    string userConfigFile = orderedDirectories.Current.FullName + "\\user.config";
                    Console.WriteLine("Attempting to read hashed password from '" + userConfigFile + "'");
                    XPathDocument     reader    = new XPathDocument(userConfigFile);
                    XPathNavigator    navigator = reader.CreateNavigator();
                    XPathNodeIterator iterator  = navigator.Select("/configuration/userSettings/StorageCraft.ImageManager.Properties.Settings/setting[@name='password']/value");
                    iterator.MoveNext();
                    hashedPassword = iterator.Current.Value;
                    Console.WriteLine("Password obtained from file");
                }

                Console.WriteLine("Connecting to ImageManager service");

                // using the IAgent interface instead of IAgent3 for compatibility with older versions.
                // None of the data we query for monitoring relies on the IAgent3 interface.
                IAgent agent = (IAgent)Client.Connect("localhost", 56765, hashedPassword);
                if (agent == null)
                {
                    Console.WriteLine("Incorrect password provided for local ImageManager service");
                    return(1);
                }
                agent.Ping();
                Console.WriteLine("Retrieving list of Managed Folders");
                List <ManagedFolder> allFolders = agent.ManagedFolders;
                string allFoldersText           = "";
                // we put all managed folders in each folder instance, because the StorageCraft ImageManager Job List service just grabs the first one
                foreach (ManagedFolder folder in allFolders)
                {
                    allFoldersText = allFoldersText + eqLine + folder.Path;
                }
                foreach (ManagedFolder folder in allFolders)
                {
                    Console.WriteLine("--------------------------------------------");
                    Console.WriteLine("Found folder: '" + folder.Path);
                    Console.WriteLine("  State: " + folder.State);
                    int stateValue;
                    switch (folder.State)
                    {
                    case FolderState.Active: stateValue = 0; break;

                    case FolderState.Syncing: stateValue = 1; break;

                    case FolderState.Offline: stateValue = 2; break;

                    case FolderState.Failure: stateValue = 3; break;

                    default: throw new Exception("Unhandled job state value " + folder.State.ToString());
                    }
                    Console.WriteLine("  State Value: " + stateValue);

                    Console.WriteLine("  Machine Name: " + folder.ImagedComputer);
                    Console.WriteLine("  File Count: " + folder.ImageFileCount);
                    IFolderServiceLocator locator = agent.Services;
                    Console.WriteLine("Querying verification data");
                    IVerificationService verificationService = locator.Find <IVerificationService>(folder.Id);
                    String lastSuccessfulVerification        = (DateTime.MinValue.Equals(verificationService.LastSuccessTime) ? "Never" : verificationService.LastSuccessTime.ToString());

                    Console.WriteLine("Verification Policy:");
                    Console.WriteLine("  VerifyNewImages:" + verificationService.Policy.VerifyNewImages);
                    Console.WriteLine("  ReverifyExistingImages:" + verificationService.Policy.ReverifyExistingImages);
                    Console.WriteLine("  ReverifyInterval: " + verificationService.Policy.ReverifyInterval);
                    Console.WriteLine("Last successful verification: " + lastSuccessfulVerification);
                    Console.WriteLine("Number of failures detected: " + verificationService.Failures.Count);
                    List <VerificationFailure> sortedVerificationFailures = verificationService.Failures.OrderByDescending(o => o.FailureTime).ToList();
                    string verificationFailureDetails = (verificationService.Failures.Count > 0 ? "" : "N/A");
                    foreach (VerificationFailure failure in sortedVerificationFailures)
                    {
                        Console.WriteLine("Verification failure detected - " + failure.FailureTime.ToString() + ": " + failure.Reason);
                        verificationFailureDetails += dashline + " " + failure.FailureTime.ToString() + ": " + failure.Reason + " ";
                    }


                    Console.WriteLine("Querying consolidation data");
                    IConsolidationService consolidationService = locator.Find <IConsolidationService>(folder.Id);
                    Console.WriteLine("Consolidation Policy:");
                    Console.WriteLine("  ConsolidationEnabled:" + consolidationService.Policy.IsEnabled);
                    Console.WriteLine("  MonthlyConsolidationDay:" + consolidationService.Policy.MonthlyConsolidationDay);
                    Console.WriteLine("  MonthlyConsolidationDayOfWeek:" + consolidationService.Policy.MonthlyConsolidationDayOfWeek);
                    Console.WriteLine("  MonthlyConsolidationWeek:" + consolidationService.Policy.MonthlyConsolidationWeek);
                    Console.WriteLine("  WeeklyConsolidationDay:" + consolidationService.Policy.WeeklyConsolidationDay);

                    String lastSuccessfulConsolidation = (DateTime.MinValue.Equals(consolidationService.LastSuccessTime) ? "Never" : consolidationService.LastSuccessTime.ToString());
                    Console.WriteLine("Last successful consolidation: " + lastSuccessfulConsolidation + ", number of failures detected: " + consolidationService.Failures.Count);
                    Console.WriteLine("last consolidation success message: " + consolidationService.LastSuccessMessage);
                    List <ConsolidationFailure> sortedConsolidationFailures = consolidationService.Failures.OrderByDescending(o => o.FailureTime).ToList();
                    string consolidationFailureDetails = (consolidationService.Failures.Count > 0 ? eqLine : "N/A");
                    foreach (ConsolidationFailure failure in consolidationService.Failures)
                    {
                        Console.WriteLine("Consolidation failure detected - " + failure.FailureTime.ToString() + ": " + failure.Reason);
                        consolidationFailureDetails += " " + failure.FailureTime.ToString() + ": " + failure.Reason + " " + dashline;
                    }


                    Console.WriteLine("Querying replication data");
                    // using the IReplicationService interface instead of IReplicationService2 for compatibility with older versions.
                    // None of the data we query for monitoring relies on the IReplicationService2 interface.
                    IReplicationService replicationService = locator.Find <IReplicationService>(folder.Id);
                    int    failedReplications     = 0;
                    int    queuedFiles            = 0;
                    string replicationTargetsText = (replicationService.Targets.Count > 0 ? "" : "N/A");
                    foreach (ReplicationTarget target in replicationService.Targets)
                    {
                        Console.WriteLine("Replication Target Found: " + target.FullPath);
                        Console.WriteLine("  Type: " + target.Destination.Type.ToString() + ", Successful: " + target.IsSuccessful + ", Status: " + target.Status.Text + ", Queued Files: " + target.Status.QueuedFiles);

                        if (!target.IsSuccessful)
                        {
                            failedReplications++;
                        }
                        queuedFiles            += (int)target.Status.QueuedFiles;
                        replicationTargetsText += eqLine + "Path: " + target.FullPath + eqLine +
                                                  "Type: " + target.Destination.Type.ToString() + dashline +
                                                  "Queued Files Count: " + target.Status.QueuedFiles + dashline +
                                                  "Status: " + target.Status.Text + dashline +
                                                  "Successful: " + target.IsSuccessful + dashline;
                    }
                    Console.WriteLine("Failed replication targets: " + failedReplications);


                    Console.WriteLine("Querying retention data");
                    IRetentionService retentionService = locator.Find <IRetentionService>(folder.Id);
                    Console.WriteLine("Number of retention issues: " + retentionService.Issues.Count);
                    Console.WriteLine("Retention Policy:");
                    bool            retentionPolicyInheritedFromGlobal = retentionService.Policy == null;
                    RetentionPolicy retentionPolicy = null;
                    if (retentionPolicyInheritedFromGlobal)
                    {
                        try
                        {
                            retentionPolicy = agent.AgentSettings.AgentRetentionPolicy;
                        }
                        catch (TypeLoadException e)
                        {
                            // type won't exist in the dll prior to 6.0
                        }
                    }
                    else
                    {
                        retentionPolicy = retentionService.Policy;
                    }
                    Console.WriteLine("  InheritedFromGlobal:" + retentionPolicyInheritedFromGlobal);
                    Console.WriteLine("  RetentionEnabled:" + retentionPolicy.IsEnabled);
                    Console.WriteLine("  DaysToRetainIntraDailyImages:" + retentionPolicy.DaysToRetainIntraDailyImages);
                    Console.WriteLine("  DaysToRetainConsolidatedDailyImages:" + retentionPolicy.DaysToRetainConsolidatedDailyImages);
                    Console.WriteLine("  DaysToRetainConsolidatedWeeklyImages:" + retentionPolicy.DaysToRetainConsolidatedWeeklyImages);
                    try
                    {
                        retentionPolicy.MonthsToRetainConsolidatedMonthlyImages = -1;
                        Console.WriteLine("  MonthsToRetainConsolidatedMonthlyImages:" + retentionPolicy.MonthsToRetainConsolidatedMonthlyImages);
                        Console.WriteLine("  MonthlyRetentionIsSupported:" + retentionPolicy.MonthlyRetentionIsSupported);
                    }
                    catch (TypeLoadException e)
                    {
                        // type won't exist in the dll prior to 6.0
                    }
                    Console.WriteLine("  MoveConsolidatedImages:" + retentionPolicy.MoveConsolidatedImages);
                    string retentionIssuesText = (retentionService.Issues.Count > 0 ? "" : "N/A");
                    foreach (RetentionIssue issue in retentionService.Issues)
                    {
                        Console.WriteLine(issue.IssueTime + " Reason: " + issue.Reason);
                        retentionIssuesText += dashline + " " + issue.IssueTime.ToString() + ": " + issue.Reason + " ";
                    }


                    Console.WriteLine("Querying Headstart Restore data");
                    // using the IHeadStartService interface instead of IHeadStartService2 for compatibility with older versions.
                    // None of the data we query for monitoring relies on the IHeadStartService2 interface.
                    IHeadStartService headStartService = locator.Find <IHeadStartService>(folder.Id);
                    int    failedHeadstartJobs         = 0;
                    string headstartJobsText           = (headStartService.FindAllJobs().Count > 0 ? "" : "N/A");
                    foreach (HeadStartJob job in headStartService.FindAllJobs())
                    {
                        Console.WriteLine("Headstart Restore Job Found: " + job.Name + ", Destination: '" + job.Destination.Path + "', State: " + job.State.ToString());
                        if (job.State.Equals(HeadStartState.Failure))
                        {
                            failedHeadstartJobs++;
                        }
                        headstartJobsText += eqLine + "Job Name: " + job.Name + eqLine +
                                             "Destination Path: " + job.Destination.Path + dashline +
                                             "State: " + job.State.ToString() + dashline;
                        foreach (HeadStartTarget target in job.Targets)
                        {
                            headstartJobsText += "Target " + target.Id + tildaline +
                                                 "Status: " + target.Status.Text + tildaline +
                                                 "LastAppliedSnapshotTime: " + target.Status.LastAppliedSnapshotTime + tildaline +
                                                 "UnappliedSnapshotDays: " + target.UnappliedSnapshotDays.Count + dashline;
                        }
                    }
                    Console.WriteLine("Failed headstart restore jobs: " + failedHeadstartJobs);

                    PutOptions options = new PutOptions();
                    options.Type = PutType.UpdateOrCreate;
                    ManagementClass  objHostSettingClass = new ManagementClass(wmiNamespaceString, wmiClassString, null);
                    ManagementObject wmiObject           = objHostSettingClass.CreateInstance();

                    wmiObject.SetPropertyValue("ManagedFolder", folder.Path);
                    wmiObject.SetPropertyValue("MachineName", folder.ImagedComputer);
                    wmiObject.SetPropertyValue("OverallState", folder.State);
                    wmiObject.SetPropertyValue("OverallStateValue", stateValue);
                    wmiObject.SetPropertyValue("FileCount", folder.ImageFileCount);

                    wmiObject.SetPropertyValue("NumberOfFilesFailingVerification", verificationService.Failures.Count);
                    wmiObject.SetPropertyValue("VerificationFailureDetails", verificationFailureDetails);
                    wmiObject.SetPropertyValue("LastSuccessfulVerification", lastSuccessfulVerification);
                    wmiObject.SetPropertyValue("VerifyNewImages", verificationService.Policy.VerifyNewImages);
                    wmiObject.SetPropertyValue("ReverifyExistingImages", verificationService.Policy.ReverifyExistingImages);
                    wmiObject.SetPropertyValue("ReverifyInterval", verificationService.Policy.ReverifyInterval);

                    wmiObject.SetPropertyValue("ConsolidationEnabled", consolidationService.Policy.IsEnabled);
                    wmiObject.SetPropertyValue("LastSuccessfulConsolidation", lastSuccessfulConsolidation);
                    wmiObject.SetPropertyValue("NumberOfFilesFailingConsolidation", consolidationService.Failures.Count);
                    wmiObject.SetPropertyValue("ConsolidationFailureDetails", consolidationFailureDetails);

                    wmiObject.SetPropertyValue("ReplicationTargetDetails", replicationTargetsText);
                    wmiObject.SetPropertyValue("FailedReplications", failedReplications);
                    wmiObject.SetPropertyValue("NumberOfFilesQueuedForReplication", queuedFiles);



                    wmiObject.SetPropertyValue("RetentionIssues", retentionService.Issues.Count);
                    wmiObject.SetPropertyValue("RetentionIssueDetails", retentionIssuesText);
                    wmiObject.SetPropertyValue("RetentionEnabled", retentionPolicy.IsEnabled);
                    wmiObject.SetPropertyValue("RetentionPolicyInheritedFromGlobal", retentionPolicyInheritedFromGlobal);
                    wmiObject.SetPropertyValue("DaysToRetainIntraDailyImages", retentionPolicy.DaysToRetainIntraDailyImages);
                    wmiObject.SetPropertyValue("DaysToRetainConsolidatedDailyImages", retentionPolicy.DaysToRetainConsolidatedDailyImages);
                    wmiObject.SetPropertyValue("DaysToRetainConsolidatedWeeklyImages", retentionPolicy.DaysToRetainConsolidatedWeeklyImages);
                    wmiObject.SetPropertyValue("MonthsToRetainConsolidatedMonthlyImages", retentionPolicy.MonthsToRetainConsolidatedMonthlyImages);
                    wmiObject.SetPropertyValue("MonthlyRetentionIsSupported", retentionPolicy.MonthlyRetentionIsSupported);
                    wmiObject.SetPropertyValue("MoveConsolidatedImages", retentionPolicy.MoveConsolidatedImages);

                    wmiObject.SetPropertyValue("FailedHeadstartJobs", failedHeadstartJobs);
                    wmiObject.SetPropertyValue("HeadstartJobDetails", headstartJobsText);

                    wmiObject.SetPropertyValue("LastScriptRunTime", DateTime.Now.ToString());

                    SelectQuery selectQuery                   = new SelectQuery("select * from win32_utctime");
                    ManagementObjectSearcher   searcher       = new ManagementObjectSearcher(selectQuery);
                    ManagementObjectCollection utcTimeFromWmi = searcher.Get();
                    ManagementObjectCollection.ManagementObjectEnumerator enumerator = utcTimeFromWmi.GetEnumerator();
                    enumerator.MoveNext();
                    ManagementBaseObject mbo = enumerator.Current;

                    UInt32 year   = (UInt32)mbo.GetPropertyValue("Year");
                    UInt32 month  = (UInt32)mbo.GetPropertyValue("Month");
                    UInt32 day    = (UInt32)mbo.GetPropertyValue("Day");
                    UInt32 hour   = (UInt32)mbo.GetPropertyValue("Hour");
                    UInt32 min    = (UInt32)mbo.GetPropertyValue("Minute");
                    UInt32 second = (UInt32)mbo.GetPropertyValue("Second");

                    long timestamp = ((((((year - 1970) * 31556926) + ((month - 1) * 2678400)) + ((day - 1) * 86400)) + (hour * 3600)) + (min * 60)) + (second);
                    wmiObject.SetPropertyValue("Timestamp", timestamp);

                    wmiObject.SetPropertyValue("ListOfAllManagedFolders", allFoldersText);

                    wmiObject.Put(options);
                }
                Console.WriteLine("--------------------------------------------");
                Console.WriteLine("Poll complete");
                return(0);
            }
            catch (Exception e)
            {
                Console.WriteLine("Fatal error: " + e.Message);
                return(1);
            }
        }