public void ParseNode(string text, int level) { ParseParameters parseParameters = new ParseParameters(); parseParameters.Name = text; parseParameters.Level = level; nodes.Enqueue(parseParameters); }
public MediaWikiApiParseRequestResult Parse(string title, ParseParameters parameters) { LogInfo(string.Format("parsing page \"{0}\"", title)); string data = _http_get(_get_api_url() + string.Format("?action=parse&page={0}&prop=wikitext&format=json", title)); JObject json = JObject.Parse(data); MediaWikiApiParseRequestResult result = new MediaWikiApiParseRequestResult(); if (json.ContainsKey("parse")) { result.Text = json["parse"]["wikitext"]["*"].Value <string>(); } else if (json.ContainsKey("error")) { result.SetError(json["error"]["code"].Value <string>(), json["error"]["info"].Value <string>()); } return(result); }
public static int Main(string[] arguments) { // initiate parameter parsing ParseParameters parameter = new ParseParameters(); // default parameter is allowed parameter.EnableDefaultParameter(); // parse command line if (parameter.Scan(arguments)) { // error reading command line Console.Error.WriteLine(parameter.errorText); return(-1); } // check if there is an unknown parameter if (!parameter.CheckForUnknown(new string[] { "?", "h", "help", "l", "log", "logname", "c", "computer", "computername", "s", "start", "starttime", "e", "end", "endtime", "level", "csv", "f", "file", "filename", "q", "quiet", "domainname", "domain", "d", "username", "user", "u", "password", "pass", "p" })) { // error reading command line Console.Error.WriteLine("Unknown parameter error."); return(-1); } if (parameter.Exist("?") || parameter.Exist("h") || parameter.Exist("help")) { // help wanted Console.WriteLine("{0}\t\t\t\t\tMarkus Scholtes, 2019\n", System.AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("Console program to determine the events of all event logs ordered by time.\n"); Console.WriteLine("{0} [[-logname:]<LOGNAMES>] [-level:<LEVEL>]", System.AppDomain.CurrentDomain.FriendlyName); Console.WriteLine(" [-starttime:<STARTTIME>] [-endtime:<ENDTIME>] [-computername:<COMPUTER>]"); Console.WriteLine(" [-filename:<FILENAME>] [-csv] [-quiet] [-?|-help]"); Console.WriteLine("\nParameters:"); Console.WriteLine("-logname:<LOGNAMES> comma separated list of event log names. Queries all event"); Console.WriteLine(" logs if omitted (can be abbreviated as -log or -l or can be omitted)."); Console.WriteLine("-level:<LEVEL> queries up to level <LEVEL>. Queries all events if omitted."); Console.WriteLine(" Level: Critical - 1, Error - 2, Warning - 3, Informational - 4, Verbose - 5"); Console.WriteLine("-starttime:<STARTTIME> start time of events to query (can be abbreviated as"); Console.WriteLine(" -start or -s). Default is end time minus one hour."); Console.WriteLine("-endtime:<ENDTIME> end time of events to query (can be abbreviated as -end or"); Console.WriteLine(" -e). Default is now."); Console.WriteLine("-computername:<COMPUTER> name of computer to query (can be abbreviated as"); Console.WriteLine(" -computer or -c). Default is the local system."); Console.WriteLine("-domainname:<DOMAIN> name of windows domain to logon (can be abbreviated as"); Console.WriteLine(" -domain or -d). Default is to pass through current credentials."); Console.WriteLine("-username:<USER> name of windows user to logon (can be abbreviated as -user or"); Console.WriteLine(" -u). Default is to pass through current credentials."); Console.WriteLine("-password:<PASSWORD> password of windows user to logon (can be abbreviated as"); Console.WriteLine(" -pass or -p). Default is to pass through current credentials."); Console.WriteLine("-filename:<FILENAME> name of the file in which the results are output (can be"); Console.WriteLine(" abbreviated as -file or -f). Default is output to the console."); Console.WriteLine("-csv output format \"comma separated\" instead of output format text."); Console.WriteLine("-quiet shows only error messages and results (can be abbreviated as -q)."); Console.WriteLine("-? or -help shows this help (can be abbreviated as -h)."); Console.WriteLine("\nExamples:"); Console.WriteLine("{0} -start:10:00 -end:11:00", System.AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("{0} System,Setup,Application -Computer=REMOTESYSTEM", System.AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("{0} /logname=Application /level:2 /q /CSV /file:OnlyErrors.csv", System.AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("{0} \"/starttime:2019/11/29 10:00\" \"/endtime:2019/11/29 11:00\"", System.AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("{0} \"/s=2019/12/08 10:09:49.450\" \"/e=2019/12/08 10:09:49.850\"", System.AppDomain.CurrentDomain.FriendlyName); Console.WriteLine("{0} /log=Security -Computer=REMOTE /D:DOM /U:Admin /P=NoP@ss", System.AppDomain.CurrentDomain.FriendlyName); return(0); } bool bQuiet = false; // no status messages? if (parameter.Exist("q") || parameter.Exist("quiet")) { bQuiet = true; } // read end time for log query DateTime endTime; // read parameter /e, /end or /endtime string endString = parameter.ValueOrDefault("e", parameter.ValueOrDefault("end", parameter.Value("endtime"))); if (endString != "") { // parameter set, convert to timestamp try { endTime = DateTime.Parse(endString); } catch { // cannot convert string to timestamp Console.Error.WriteLine("Error: unknown time format"); return(-1); } } else { // parameter not specified, use default (now) endTime = DateTime.Now; } // read start time for log query DateTime startTime; // read parameter /s, /start or /starttime string startString = parameter.ValueOrDefault("s", parameter.ValueOrDefault("start", parameter.Value("starttime"))); if (startString != "") { // parameter set, convert to timestamp try { startTime = DateTime.Parse(startString); } catch { // cannot convert string to timestamp Console.Error.WriteLine("Error: unknown time format"); return(-1); } } else { // parameter not specified, use default (end time minus one hour) startTime = endTime.AddHours(-1.0); } if (endTime <= startTime) { // end time has to be later than start time Console.Error.WriteLine("Error: end time has to be later than start time"); return(-1); } // get information level, 0 = default = return all events // Level: LogAlways - 0, Critical - 1, Error - 2, Warning - 3, Informational - 4, Verbose - 5 // there are different levels for auditing logs! string informationLevel = parameter.Value("level"); int maxLevel = 0; if (informationLevel != "") { // parameter level was given if (Int32.TryParse(informationLevel, out maxLevel)) { // filter for information level if ((maxLevel < 0) || (maxLevel > 5)) { // mark as wrong information level maxLevel = -1; } } else { // mark as wrong information level maxLevel = -1; } if (maxLevel < 0) { // wrong information level -> error Console.Error.WriteLine("Error: unknown information level"); Console.Error.WriteLine("The following values are allowed: up to Critical - 1, up to Error - 2, up to Warning - 3, up to Informational - 4, up to Verbose - 5"); return(-1); } } EventLogSession session; string userName = parameter.ValueOrDefault("u", parameter.ValueOrDefault("user", parameter.Value("username"))); if (userName == "") { // connect to remote computer in parameter /c, /computer or /computername or to "localhost" with existent credentials session = new EventLogSession(parameter.ValueOrDefault("c", parameter.ValueOrDefault("computer", parameter.ValueOrDefault("computername", "localhost")))); } else { string domainName = parameter.ValueOrDefault("d", parameter.ValueOrDefault("domain", parameter.Value("domainname"))); string passWord = parameter.ValueOrDefault("p", parameter.ValueOrDefault("pass", parameter.Value("password"))); // connect to remote computer in parameter /c, /computer or /computername or to "localhost" with credentials in parameters session = new EventLogSession(parameter.ValueOrDefault("c", parameter.ValueOrDefault("computer", parameter.ValueOrDefault("computername", "localhost"))), domainName, userName, new System.Net.NetworkCredential("", passWord).SecurePassword, SessionAuthentication.Default); } int outputMode = 1; // 1 - Text, 2 - CSV if (parameter.Exist("csv")) { outputMode = 2; } // get filename. If no filename is given output is written to console string fileName = parameter.ValueOrDefault("f", parameter.ValueOrDefault("file", parameter.Value("filename"))); List <string> logNames; // read parameter /l or /log or default parameter for log name (or comma separated list of names given) if (parameter.ValueOrDefault("l", parameter.ValueOrDefault("log", parameter.ValueOrDefault("logname", parameter.DefaultParameter()))) != "") { // yes, only read those logs logNames = new List <string>(parameter.ValueOrDefault("l", parameter.ValueOrDefault("log", parameter.DefaultParameter())).Split(new char[] { ',', ';' }).Where(val => val.Trim() != "").Select(val => val.Trim()).ToArray()); } else { // no parameter for log, read all logs try { // retrieve all log names logNames = new List <string>(session.GetLogNames()); } catch (Exception e) { // cannot retrieve log names Console.Error.WriteLine("Error connecting to event log: " + e.Message); return(-2); } } // sort log names now to save work later logNames.Sort(); int logCount = 0; List <EventEntry> eventList = new List <EventEntry>(); foreach (string name in logNames) { // query entries for all logs if (GetEntries(ref eventList, name, session, startTime, endTime, maxLevel, outputMode, bQuiet)) { logCount++; } } if (eventList.Count > 0) { // only write events if there are any if (fileName == "") { // output to console if (outputMode == 1) { Console.WriteLine("time created\tlog\tid\tsource\tlevel\tdescription"); } else { Console.WriteLine("\"time created\";\"log\";\"id\";\"source\";\"level\";\"description\""); } foreach (EventEntry entry in eventList.OrderBy(a => a.timeCreated)) { // output events sorted by time Console.WriteLine(entry.message); } } else { // output to file try { // write header line only to new files bool typeHeader = true; if (File.Exists(fileName)) { typeHeader = false; } FileStream fs = new FileStream(fileName, FileMode.Append); using (StreamWriter sw = new StreamWriter(fs, Encoding.Default)) { if (typeHeader) { // output the header line if (outputMode == 1) { sw.WriteLine("time created\tlog\tid\tsource\tlevel\tdescription"); } else { sw.WriteLine("\"time created\";\"log\";\"id\";\"source\";\"level\";\"description\""); } } foreach (EventEntry entry in eventList.OrderBy(a => a.timeCreated)) { // output events sorted by time sw.WriteLine(entry.message); } } if (fs != null) { fs.Dispose(); } } catch (Exception e) { Console.Error.WriteLine("Error writing to file \"" + fileName + "\": " + e.Message); return(1); } } } if (!bQuiet) { Console.WriteLine("Successfully processed " + eventList.Count + " events from " + logCount + " logs, access errors with " + (int)(logNames.Count - logCount) + " logs."); } return(0); }
public static int Main(string[] argv) { void resetstdout() { if (@out != null) { Console.Out.Dispose(); Console.SetOut(@out); ms.Dispose(); } } int ret; try { Directory.SetCurrentDirectory(ASM_FILE.Directory.FullName); Console.Title = TITLE; if (Win32.System == OS.Windows) { Console.BufferWidth = Math.Max(201, Console.BufferWidth); } ret = MainCore(ParseParameters(argv, ("d", "debug"), ("dp", "dependencies"), ("o", "output"), ("u", "unsafe"), ("c", "clean-output"), ("i", "input"), ("h", "help"), ("?", "help"), ("l", "lang"), ("q", "quiet"), ("ll", "list-languages"), ("kp", "key-pair"), ("s", "settings"), ("rs", "reset-settings"), ("v", "verbose"), ("vv", "visual"), ("mef", "msbuild-error-format"), ("ms", "msbuild-error-format"), ("k", "keep-temp"), ("g", "generate-always"), ("t", "target-system"), ("a", "architecture"), ("wall", "warnings-as-errors"), ("r", "run"), ("w", "warm-up"), ("wup", "warm-up") ), out _); resetstdout(); } catch (Exception ex) when(!Debugger.IsAttached) { ret = -1; resetstdout(); StringBuilder sb = new StringBuilder(); do { sb.Insert(0, $"[{ex.GetType().FullName}] {ex.Message}:\n{ex.StackTrace}\n"); ex = ex.InnerException; }while (ex != null); DebugPrintUtil.PrintSeperator("FATAL ERROR"); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(sb.ToString()); Console.ForegroundColor = ConsoleColor.Gray; DebugPrintUtil.DisplayFinalResult(DebugPrintUtil.FinalResult.Errors_Failed); } if (Debugger.IsAttached) { Console.WriteLine("Press any key to exit ..."); Console.ReadKey(true); } return(ret); }