diff --git a/src/nmdc-log-service/__dist/README.txt b/src/nmdc-log-service/__dist/README.txt deleted file mode 100644 index 3f97728..0000000 --- a/src/nmdc-log-service/__dist/README.txt +++ /dev/null @@ -1,52 +0,0 @@ -A logging service for NMDC hubs. - -It logs public chat messages to a file, categorised by months. Binaries are provided for Windows/Linux amd64/i386. - -Written in golang -Tags: nmdc - -=USAGE= - -`$nmdc-log-service -Help - -Usage of nmdc-log-service: - -Debug - Print additional information on stdout - -Dir string - Output directory (default ".") - -LogConnectionState - Include connection state changes in log (default true) - -Nick string - Nick (default "nmdc-log-service") - -PMResponse string - Message to respond with on PM (default "This is an automated service. For enquiries, please contact an administrator.") - -Password string - Registered nick password - -Server string - Addresses to connect to (comma-separated) - -VerifyTLS - Verify TLS certificates (default true) -` - -=CHANGELOG= - -2016-04-16 1.0.4 -- Enhancement: Upgrade `libnmdc` from `r5` to `r6` -- Include a sample systemd unit script in source archive -- Fix an issue showing zero connected hubs in user tag -- Fix a cosmetic issue with logging repeated identical connection failure messages - -2016-04-04 1.0.3 -- Enhancement: Upgrade `libnmdc` from `r4` to `r5` - -2016-04-03 1.0.2 -- Enhancement: Upgrade `libnmdc` from `r3` to `r4` - -2016-04-03 1.0.1 -- Enhancement: Add `-VerifyTLS` option -- Enhancement: Upgrade `libnmdc` from `r2` to `r3` -- Fix an issue writing log files on Linux -- Fix a cosmetic issue with error message formatting - -2016-04-02 1.0.0 -- Initial public release diff --git a/src/nmdc-log-service/build.sh b/src/nmdc-log-service/build.sh deleted file mode 100644 index 619ce75..0000000 --- a/src/nmdc-log-service/build.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -set -eu - -export GOPATH=$( - cd ../../ - cygpath -w "$(pwd)" -) - -sanitise() { - local tmp=$(mktemp) - cat "$1" | perl -pe 's~C:.Users.......Documents.DEV.~C:/xxxxxxxxxxxxxxxxxxxxxxxxx/~g' > "$tmp" - mv "$tmp" "$1" - chmod 755 "$1" -} - -main() { - - local version="" - read -p "Enter version string (blank for timestamp)> " version - if [[ $version == "" ]] ; then - version=$(date +%s) - fi - echo "Using '${version}' as the version." - - if [[ -f nmdc-log-service.exe ]] ; then - rm ./nmdc-log-service.exe - fi - if [[ -f nmdc-log-service ]] ; then - rm ./nmdc-log-service - fi - - echo "Building win64..." - GOARCH=amd64 GOOS=windows go build -a -ldflags -s -o nmdc-log-service.exe - sanitise nmdc-log-service.exe - 7z a -mx9 nmdc-log-service-${version}-win64.7z nmdc-log-service.exe >/dev/null - rm ./nmdc-log-service.exe - - echo "Building win32..." - GOARCH=386 GOOS=windows go build -a -ldflags -s -o nmdc-log-service.exe - sanitise nmdc-log-service.exe - 7z a -mx9 nmdc-log-service-${version}-win32.7z nmdc-log-service.exe >/dev/null - rm ./nmdc-log-service.exe - - echo "Building linux64..." - GOARCH=amd64 GOOS=linux go build -a -ldflags -s -o nmdc-log-service - sanitise nmdc-log-service - XZ_OPT=-9 tar caf nmdc-log-service-${version}-linux64.tar.xz nmdc-log-service --owner=0 --group=0 - rm ./nmdc-log-service - - echo "Building linux32..." - GOARCH=386 GOOS=linux go build -a -ldflags -s -o nmdc-log-service - sanitise nmdc-log-service - XZ_OPT=-9 tar caf nmdc-log-service-${version}-linux32.tar.xz nmdc-log-service --owner=0 --group=0 - rm ./nmdc-log-service - - echo "Build complete." -} - -main "$@" diff --git a/src/nmdc-log-service/hublog.service b/src/nmdc-log-service/hublog.service deleted file mode 100644 index e1cc762..0000000 --- a/src/nmdc-log-service/hublog.service +++ /dev/null @@ -1,14 +0,0 @@ -[Unit] -Description=NMDC Log Service - -[Service] -Environment=TZ=Etc/UTC -Type=simple -ExecStart=/home/hublog/nmdc-log-service -Dir /home/hublog/logs/ -Server ... -Nick ... -Password '...' -VerifyTLS=false -Restart=always -RestartSec=30s -User=hublog -Group=nogroup - -[Install] -WantedBy=multi-user.target diff --git a/src/nmdc-log-service/main.go b/src/nmdc-log-service/main.go deleted file mode 100644 index bb99c4b..0000000 --- a/src/nmdc-log-service/main.go +++ /dev/null @@ -1,163 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "libnmdc" - "os" - "path/filepath" - "regexp" - "strings" - "time" -) - -var BaseDir string = "." -var PMResponse string = "" -var LogConnectionState bool -var DebugMode bool -var VerifyTLS bool -var CharacterMatcher *regexp.Regexp - -func init() { - CharacterMatcher = regexp.MustCompile("[^a-zA-Z0-9]") -} - -func GetDirectoryNameForHub(hub string) string { - return filepath.Join(BaseDir, CharacterMatcher.ReplaceAllString(hub, "_")) -} - -func LogMessage(hub, message string) { - - instant := time.Now() // using system timezone - - // Log file path - monthStamp := instant.Format("2006-01") - logFilePath := filepath.Join(GetDirectoryNameForHub(hub), monthStamp+".log") - - // Produce a timestamp - timeStamp := instant.Format("2006-01-02 15:04:05") - - fh, err := os.OpenFile(logFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) - if err != nil { - fmt.Fprintf(os.Stderr, "Couldn't open file '%s': %s\n", logFilePath, err.Error()) - return - } - defer fh.Close() - - _, err = fh.WriteString("[" + timeStamp + "] " + message + "\n") - if err != nil { - fmt.Fprintf(os.Stderr, "Error writing to file '%s': %s\n", logFilePath, err.Error()) - return - } -} - -type HubWorker struct { - LastConnectionStateMessage string -} - -func (this *HubWorker) MainLoop(addr, nick, password string) { - - opts := libnmdc.HubConnectionOptions{ - Address: libnmdc.HubAddress(addr), - SkipVerifyTLS: !VerifyTLS, - Self: *libnmdc.NewUserInfo(nick), - NickPassword: password, - } - hub := opts.Connect() - - for { - event := <-hub.OnEvent - - if DebugMode { - fmt.Printf("DEBUG: %s %v\n", addr, event) - } - - switch event.EventType { - case libnmdc.EVENT_CONNECTION_STATE_CHANGED: - if LogConnectionState { - str := "* " + event.StateChange.Format() - if len(event.Message) > 0 { - str += " (" + event.Message + ")" - } - - // Prevent logging the same message repeatedly - if str != this.LastConnectionStateMessage { - LogMessage(addr, str) - } - this.LastConnectionStateMessage = str - } - - case libnmdc.EVENT_PUBLIC: - LogMessage(addr, "<"+event.Nick+"> "+event.Message) - - case libnmdc.EVENT_PRIVATE: - fmt.Printf("Got PM %v\n", event) - hub.SayPrivate(event.Nick, PMResponse) - - case libnmdc.EVENT_SYSTEM_MESSAGE_FROM_CONN, libnmdc.EVENT_SYSTEM_MESSAGE_FROM_HUB: - if strings.HasPrefix(event.Message, "* ") { - LogMessage(addr, event.Message) - } else { - LogMessage(addr, "* "+event.Message) - } - - } - } -} - -func main() { - - // Parse arguments - hubs := flag.String("Server", "", "Addresses to connect to (comma-separated)") - nick := flag.String("Nick", "nmdc-log-service", "Nick") - password := flag.String("Password", "", "Registered nick password") - flag.StringVar(&BaseDir, "Dir", ".", "Output directory") - flag.BoolVar(&LogConnectionState, "LogConnectionState", true, "Include connection state changes in log") - flag.StringVar(&PMResponse, "PMResponse", "This is an automated service. For enquiries, please contact an administrator.", "Message to respond with on PM") - flag.BoolVar(&DebugMode, "Debug", false, "Print additional information on stdout") - flag.BoolVar(&VerifyTLS, "VerifyTLS", true, "Verify TLS certificates") - flag.Parse() - - // Assert dir exists - dinfo, err := os.Stat(BaseDir) - if err != nil { - fmt.Fprintf(os.Stderr, "FATAL: %s\n", err.Error()) - os.Exit(1) - } - if !dinfo.IsDir() { - fmt.Fprintf(os.Stderr, "FATAL: Path '%s' is not a directory\n", BaseDir) - } - - if !VerifyTLS { - fmt.Fprintf(os.Stderr, "WARNING: TLS certificates will not be verified!\n") - } - - // Launch loggers - all_hubs := strings.Split(*hubs, ",") - launch_ct := 0 - for _, hubaddr := range all_hubs { - if len(hubaddr) == 0 { - continue - } - - // Assert target directory exists - os.MkdirAll(GetDirectoryNameForHub(hubaddr), 0755) - - // Launch logger - hw := HubWorker{} - go hw.MainLoop(hubaddr, *nick, *password) - - launch_ct++ - } - - if launch_ct == 0 { - fmt.Fprintln(os.Stderr, "FATAL: No hubs specified") - os.Exit(1) - } - - // Wait forever - var forever chan bool = nil - select { - case <-forever: - } -}