Ejemplo n.º 1
0
        /// <summary>
        /// Creates a list of Tailor objects. Each one can
        /// be used to tail a file.
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public static List <Tailor> Create(FilesystemParameter param, Settings settings)
        {
            sleepTime = settings.RefreshTime;
            Console.WriteLine("> Set sleep time to: " + sleepTime);

            List <Tailor> tailors = new List <Tailor>();

            foreach (FileSystemInfo fsInfo in param.FilesystemObjects)
            {
                if (fsInfo is FileInfo)
                {
                    tailors.Add(new Tailor(fsInfo as FileInfo, settings.LineCount));
                }

                if (fsInfo is DirectoryInfo)
                {
                    foreach (FileInfo fileInDir in (fsInfo as DirectoryInfo).GetFiles("*.*", SearchOption.TopDirectoryOnly))
                    {
                        tailors.Add(new Tailor(fileInDir, settings.LineCount));
                    }
                }
            }

            return(tailors);
        }
        static void Main(string[] args)
        {
#if DEBUG
            // Start 2 concurrent writers for log files in debugFolder/logs
            Writer w = new Writer();
            w.Run();
#endif

            Console.WriteLine();
            if (args.Length == 0)
            {
                Settings.PrintHelp();
                return;
            }

            // Parse config flags and slice them from command line args
            Settings settings = new Settings();
            try {
                args = settings.SliceConfigFlags(args);
            }
            catch (Exception ex) {
                Console.WriteLine("ERROR: " + ex.Message + Environment.NewLine);
                return;
            }

            // Check arguments and check if they are valid filesystem arguments
            FilesystemParameter param = new FilesystemParameter();
            param.TryParse(args);

            // No need to go on with an empty list
            if (param.IsEmpty)
            {
                Console.WriteLine("No valid arguments given. Exiting ...");
                return;
            }

            // Create a list of tail watchers
            List <Tailor> tailors = Tailor.Create(param, settings);
            if (tailors.Count == 0)
            {
                throw new ArgumentException("Error creating tailors!");
            }

            List <Task> tailTasks = StartTaskForEveryTailor(tailors);

            // Prevents exit while there are still pending tasks
            // and rechecks every ~2 secs
            while (tailTasks.Any((t) => t.Status == TaskStatus.Running || t.Status == TaskStatus.WaitingToRun))
            {
                Thread.Sleep(2000);
            }

            Console.WriteLine(Environment.NewLine + "Exiting LogTailor ... ByeBye!");
        }