Compare commits

...

20 Commits

Author SHA1 Message Date
cf0288a11c dist-archive: track binary large objects 2020-05-07 19:23:47 +12:00
fa9c16f410 doc: convert README to standard format 2020-05-07 19:19:34 +12:00
18dcafd440 convert to Go Modules 2020-05-07 19:14:56 +12:00
6641d00247 upgrade to support libnmdc v0.18.0 2020-05-07 19:14:49 +12:00
beaf18eb8e gitignore binary in source directory 2020-05-07 19:14:37 +12:00
5c4a1272c1 nmdc-log-service/scripts: fix wrong permissions on binary files inside tar archive 2016-04-16 19:22:25 +12:00
c110403a0d update README 2016-04-16 19:12:44 +12:00
b913d49317 nmdc-log-service: track sample systemd unit 2016-04-16 19:01:20 +12:00
8b23731451 nmdc-log-service: prevent logging the same connection-state message repeatedly 2016-04-16 18:21:38 +12:00
86723f24ca scripts: strip sensitive gopath string out of release binaries 2016-04-16 18:18:09 +12:00
a52fb3c43d nmdc-log-service: use NewUserInfo helper to set passive/1-connected in tag 2016-04-10 16:37:21 +12:00
ef2dd31219 update README 2016-04-04 19:04:27 +12:00
12b4086bde nmdc-log-service: readme 2016-04-03 19:24:03 +12:00
4aa0beb795 update README files 2016-04-03 13:36:41 +12:00
84ab627110 nmdc-log-service: add warning message if on TLS verification disabled 2016-04-03 13:32:19 +12:00
45dff6eab9 nmdc-log-service: add missing LF 2016-04-03 13:29:58 +12:00
0394f131be nmdc-log-service: fix opening files on linux 2016-04-03 13:29:49 +12:00
108b04acab libnmdc: fix panic() on connection failure, owing to storing nil in an interface 2016-04-03 13:15:57 +12:00
27ad91bc71 nmdc-log-service/build: build with -a 2016-04-03 11:50:37 +12:00
e9327ba859 nmdc-log-service: track readme 2016-04-02 14:31:34 +13:00
30 changed files with 154 additions and 18 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
nmdc-log-service

80
README.md Normal file
View File

@ -0,0 +1,80 @@
# nmdc-log-service
![](https://img.shields.io/badge/written%20in-golang-blue)
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.
## 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
master
- Convert to Go Modules, upgrade `libnmdc` to `v0.18.0`
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
- [⬇️ nmdc-log-service-1.0.4-win64.7z](dist-archive/nmdc-log-service-1.0.4-win64.7z) *(873.36 KiB)*
- [⬇️ nmdc-log-service-1.0.4-win32.7z](dist-archive/nmdc-log-service-1.0.4-win32.7z) *(804.14 KiB)*
- [⬇️ nmdc-log-service-1.0.4-src.7z](dist-archive/nmdc-log-service-1.0.4-src.7z) *(2.05 KiB)*
- [⬇️ nmdc-log-service-1.0.4-linux64.tar.xz](dist-archive/nmdc-log-service-1.0.4-linux64.tar.xz) *(965.75 KiB)*
- [⬇️ nmdc-log-service-1.0.4-linux32.tar.xz](dist-archive/nmdc-log-service-1.0.4-linux32.tar.xz) *(903.36 KiB)*
2016-04-04 1.0.3
- Enhancement: Upgrade `libnmdc` from `r4` to `r5`
- [⬇️ nmdc-log-service-1.0.3-win64.7z](dist-archive/nmdc-log-service-1.0.3-win64.7z) *(873.26 KiB)*
- [⬇️ nmdc-log-service-1.0.3-win32.7z](dist-archive/nmdc-log-service-1.0.3-win32.7z) *(803.45 KiB)*
- [⬇️ nmdc-log-service-1.0.3-linux64.tar.xz](dist-archive/nmdc-log-service-1.0.3-linux64.tar.xz) *(965.26 KiB)*
- [⬇️ nmdc-log-service-1.0.3-linux32.tar.xz](dist-archive/nmdc-log-service-1.0.3-linux32.tar.xz) *(902.95 KiB)*
2016-04-03 1.0.2
- Enhancement: Upgrade `libnmdc` from `r3` to `r4`
- [⬇️ nmdc-log-service-1.0.2-win64.7z](dist-archive/nmdc-log-service-1.0.2-win64.7z) *(872.64 KiB)*
- [⬇️ nmdc-log-service-1.0.2-win32.7z](dist-archive/nmdc-log-service-1.0.2-win32.7z) *(802.16 KiB)*
- [⬇️ nmdc-log-service-1.0.2-linux64.tar.xz](dist-archive/nmdc-log-service-1.0.2-linux64.tar.xz) *(965.06 KiB)*
- [⬇️ nmdc-log-service-1.0.2-linux32.tar.xz](dist-archive/nmdc-log-service-1.0.2-linux32.tar.xz) *(902.40 KiB)*
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
- [⬇️ nmdc-log-service-1.0.1-win64.7z](dist-archive/nmdc-log-service-1.0.1-win64.7z) *(874.59 KiB)*
- [⬇️ nmdc-log-service-1.0.1-win32.7z](dist-archive/nmdc-log-service-1.0.1-win32.7z) *(802.05 KiB)*
- [⬇️ nmdc-log-service-1.0.1-src.7z](dist-archive/nmdc-log-service-1.0.1-src.7z) *(2.13 KiB)*
- [⬇️ nmdc-log-service-1.0.1-linux64.tar.xz](dist-archive/nmdc-log-service-1.0.1-linux64.tar.xz) *(965.03 KiB)*
- [⬇️ nmdc-log-service-1.0.1-linux32.tar.xz](dist-archive/nmdc-log-service-1.0.1-linux32.tar.xz) *(902.57 KiB)*
2016-04-02 1.0.0
- Initial public release
- [⬇️ nmdc-log-service-1.0.0-win64.7z](dist-archive/nmdc-log-service-1.0.0-win64.7z) *(872.66 KiB)*
- [⬇️ nmdc-log-service-1.0.0-win32.7z](dist-archive/nmdc-log-service-1.0.0-win32.7z) *(802.90 KiB)*
- [⬇️ nmdc-log-service-1.0.0-src.7z](dist-archive/nmdc-log-service-1.0.0-src.7z) *(2.05 KiB)*
- [⬇️ nmdc-log-service-1.0.0-linux64.tar.xz](dist-archive/nmdc-log-service-1.0.0-linux64.tar.xz) *(964.44 KiB)*
- [⬇️ nmdc-log-service-1.0.0-linux32.tar.xz](dist-archive/nmdc-log-service-1.0.0-linux32.tar.xz) *(902.47 KiB)*

View File

@ -7,6 +7,13 @@ export GOPATH=$(
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=""
@ -24,22 +31,26 @@ main() {
fi
echo "Building win64..."
GOARCH=amd64 GOOS=windows go build -ldflags -s -o nmdc-log-service.exe
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 -ldflags -s -o nmdc-log-service.exe
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 -ldflags -s -o nmdc-log-service
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 -ldflags -s -o nmdc-log-service
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

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

5
go.mod Normal file
View File

@ -0,0 +1,5 @@
module code.ivysaur.me/nmdc-log-service
go 1.13
require code.ivysaur.me/libnmdc v0.18.0

6
go.sum Normal file
View File

@ -0,0 +1,6 @@
code.ivysaur.me/libnmdc v0.6.0 h1:I1PygqHyS3Er/u7ekYramMQ5Rw957ighnDl53Jzz2Cc=
code.ivysaur.me/libnmdc v0.6.0/go.mod h1:ZHCjIX/zm29hd2H8YtzOBHiSyowZNOHvgoMRjKbBLLg=
code.ivysaur.me/libnmdc v0.18.0 h1:BobB138EidAC3wE55CuTY7bZrFXtOy/zlssI8V1zXMk=
code.ivysaur.me/libnmdc v0.18.0/go.mod h1:5FjI0QxZEPeVTeg/e2MyJzJUwpmyE5CBAOIi7eqSxlg=
github.com/cxmcc/tiger v0.0.0-20170524142333-bde35e2713d7 h1:jBEtq1t2gpn2kEzvRlCUxvvrxl5aSWkXNPwe/hwvSNQ=
github.com/cxmcc/tiger v0.0.0-20170524142333-bde35e2713d7/go.mod h1:ruCYvt9rtYymAr4rNmfYJrl1dz8HSXUFP7cufqKOsDI=

14
hublog.service Normal file
View File

@ -0,0 +1,14 @@
[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

47
main.go
View File

@ -3,18 +3,20 @@ package main
import (
"flag"
"fmt"
"libnmdc"
"os"
"path/filepath"
"regexp"
"strings"
"time"
"code.ivysaur.me/libnmdc"
)
var BaseDir string = "."
var PMResponse string = ""
var LogConnectionState bool
var DebugMode bool
var VerifyTLS bool
var CharacterMatcher *regexp.Regexp
func init() {
@ -36,7 +38,7 @@ func LogMessage(hub, message string) {
// Produce a timestamp
timeStamp := instant.Format("2006-01-02 15:04:05")
fh, err := os.OpenFile(logFilePath, os.O_APPEND|os.O_CREATE, 0644)
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
@ -50,17 +52,23 @@ func LogMessage(hub, message string) {
}
}
func HubWorker(addr, nick, password string) {
type HubWorker struct {
LastConnectionStateMessage string
}
func (this *HubWorker) MainLoop(addr, nick, password string) {
opts := libnmdc.HubConnectionOptions{
Address: libnmdc.HubAddress(addr),
Self: libnmdc.UserInfo{Nick: nick},
NickPassword: password,
Address: libnmdc.HubAddress(addr),
SkipVerifyTLS: !VerifyTLS,
Self: libnmdc.NewUserInfo(nick),
NickPassword: password,
}
hub := opts.Connect()
for {
event := <-hub.OnEvent
evChan := make(chan libnmdc.HubEvent, 1)
hub := libnmdc.ConnectAsync(&opts, evChan)
for event := range evChan {
if DebugMode {
fmt.Printf("DEBUG: %s %v\n", addr, event)
@ -69,11 +77,16 @@ func HubWorker(addr, nick, password string) {
switch event.EventType {
case libnmdc.EVENT_CONNECTION_STATE_CHANGED:
if LogConnectionState {
str := "* " + event.StateChange.String()
if len(event.Message) > 0 {
LogMessage(addr, "* "+event.StateChange.Format()+" ("+event.Message+")")
} else {
LogMessage(addr, "* "+event.StateChange.Format())
str += " (" + event.Message + ")"
}
// Prevent logging the same message repeatedly
if str != this.LastConnectionStateMessage {
LogMessage(addr, str)
}
this.LastConnectionStateMessage = str
}
case libnmdc.EVENT_PUBLIC:
@ -104,18 +117,23 @@ func main() {
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", err.Error())
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
@ -128,7 +146,8 @@ func main() {
os.MkdirAll(GetDirectoryNameForHub(hubaddr), 0755)
// Launch logger
go HubWorker(hubaddr, *nick, *password)
hw := HubWorker{}
go hw.MainLoop(hubaddr, *nick, *password)
launch_ct++
}