예제 #1
0
        /// <summary>
        /// Faz a inicialização do log.
        /// </summary>
        private static void inicializar()
        {
            // Carrega arquivo de configuração
            _config = GerenciadorConfig.ReceberConfig <LogConfig>();
            if (_config == null)
            {
                _config = new LogConfig();
            }

            // Verifica se a origem default está criada no event viewer
            if (_config.LogarEmEventViewer && !EventLog.SourceExists(_config.NomeOrigemLogDefault))
            {
                EventLog.CreateEventSource(_config.NomeOrigemLogDefault, "Application");
            }

            // Carrega as origens do tipo informado, caso exista
            if (_config.TipoComOrigensDeLog != null)
            {
                // Varre as constantes do tipo informado verificando a existencia do atributo de log
                foreach (FieldInfo member in _config.TipoComOrigensDeLog.GetFields())
                {
                    // Verifica existencia do atributo
                    object[] attrs = member.GetCustomAttributes(typeof(LogOrigemAttribute), false);
                    if (attrs.Length > 0)
                    {
                        // Pega o atributo
                        LogOrigemAttribute attr = (LogOrigemAttribute)attrs[0];

                        // Pega valor da origem
                        string origem = attr.Origem;

                        // Pega a referencia para a origem
                        string referenciaOrigem =
                            (string)
                            _config.TipoComOrigensDeLog.InvokeMember(
                                member.Name, BindingFlags.GetField, null, null, (object[])null);

                        // Se a origem não foi informada, utiliza a string da propria referencia
                        if (origem == null)
                        {
                            origem = referenciaOrigem;
                        }

                        // Garante que a origem esteja criada no event viewer
                        if (_config.LogarEmEventViewer && !EventLog.SourceExists(origem))
                        {
                            EventLog.CreateEventSource(origem, "Application");
                        }

                        // Adiciona no dicionário
                        _dicionarioOrigens.Add(referenciaOrigem, origem);
                    }
                }
            }

            // Sinaliza
            _inicializado = true;
        }
예제 #2
0
        private void readCrontab()
        {
            ScheduleConfig _config = GerenciadorConfig.ReceberConfig <ScheduleConfig>();

            try
            {
                foreach (ScheduleItem item in _config.ScheduleItem)
                {
                    _cronlines.Add(item.value.Trim());
                    logger.Debug("Adding ScheduleItem [" + item.value.Trim() + "]");
                }
                String line;

                foreach (string linha in _cronlines)
                {
                    ArrayList minutes, hours, mDays, months, wDays;

                    line = linha;

                    if (line.Length == 0 || line.StartsWith("#"))
                    {
                        continue;
                    }

                    // re-escape space- and backslash-escapes in a cheap fashion
                    line = line.Replace("\\\\", "<BACKSLASH>");
                    line = line.Replace("\\ ", "<SPACE>");

                    // split string on whitespace
                    String[] cols = line.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);

                    for (int i = 0; i < cols.Length; i++)
                    {
                        cols[i] = cols[i].Replace("<BACKSLASH>", "\\");
                        cols[i] = cols[i].Replace("<SPACE>", " ");
                    }

                    if (cols.Length < 6)
                    {
                        reportError("Parse error in crontab (line too short).");
                        crontab = new ArrayList();
                    }

                    minutes = parseTimes(cols[0], 0, 59);
                    hours   = parseTimes(cols[1], 0, 23);
                    months  = parseTimes(cols[3], 1, 12);

                    if (!cols[2].Equals("*") && cols[3].Equals("*"))
                    {
                        // every n monthdays, disregarding weekdays
                        mDays = parseTimes(cols[2], 1, 31);
                        wDays = new ArrayList();
                        wDays.Add(-1);                          // empty value
                    }
                    else if (cols[2].Equals("*") && !cols[3].Equals("*"))
                    {
                        // every n weekdays, disregarding monthdays
                        mDays = new ArrayList();
                        mDays.Add(-1);                          // empty value
                        wDays = parseTimes(cols[4], 1, 7);      // 60 * 24 * 7
                    }
                    else
                    {
                        // every n weekdays, every m monthdays
                        mDays = parseTimes(cols[2], 1, 31);
                        wDays = parseTimes(cols[4], 1, 7);                          // 60 * 24 * 7
                    }

                    String args = "";

                    for (int i = 6; i < cols.Length; i++)
                    {
                        args += cols[i].Trim() + " ";
                    }

                    args = args.Trim();


                    // Prestar atencao aqui....inicializa com 6
                    ArrayList entry = new ArrayList(6);

                    entry.Add(months);
                    entry.Add(mDays);
                    entry.Add(wDays);
                    entry.Add(hours);
                    entry.Add(minutes);
                    entry.Add(cols[5]);
                    entry.Add(args);

                    crontab.Add(entry);

                    logger.Info("Command [" + cols[5] + "] scheduled to run");
                }
            }
            catch (Exception e)
            {
                reportError(e.ToString());
            }
        }