/* * Copyright (c) 2018, Psiphon Inc. * All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ package main import ( "flag" "fmt" "os" "strings" "github.com/Psiphon-Labs/psiphon-tunnel-core/Server/logging/analysis" ) type stringListFlag []string func (list *stringListFlag) String() string { return strings.Join(*list, ", ") } func (list *stringListFlag) Set(flagValue string) error { *list = append(*list, flagValue) return nil } func main() { var logFileList stringListFlag var printMessages bool var printMetrics bool var printUnknowns bool var printStructure bool var printExample bool flag.Var( &logFileList, "file", "file to analyze; flag may be repeated to analyze multiple files") flag.BoolVar( &printMessages, "messages", false, "display message type logs") flag.BoolVar( &printMetrics, "metrics", false, "display metric type logs") flag.BoolVar( &printUnknowns, "unknown", false, "display logs of an unknown type") flag.BoolVar( &printStructure, "structure", false, "print each log model with its key graph structure") flag.BoolVar( &printExample, "example", false, "print each log model with an example") flag.Usage = func() { fmt.Fprintf(os.Stderr, "Usage:\n\n"+ "%s \n"+ os.Args[0], os.Args[0]+"\n\n") fmt.Printf("\n") flag.PrintDefaults() } flag.Parse() if len(logFileList) < 1 { flag.Usage() os.Exit(1) } logFileStats, err := analysis.NewLogStatsFromFiles(logFileList) if err != nil { fmt.Printf("Error while parsing log files: %s\n", err) os.Exit(1) } logFileStats.Print(printMessages, printMetrics, printUnknowns, printStructure, printExample) fmt.Printf("Found %d messages, %d metrics and %d unknown logs with a total of %d distinct types of logs\n", logFileStats.MessageLogModels.Count, logFileStats.MetricsLogModels.Count, logFileStats.UnknownLogModels.Count, logFileStats.NumDistinctLogs()) }