require (
go.cypherpunks.ru/recfile v0.3.0
+ go.cypherpunks.ru/tai64n v0.1.0
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9
golang.org/x/sys v0.0.0-20201117222635-ba5294a509c7
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221
go.cypherpunks.ru/recfile v0.3.0 h1:aZRMMst8hoNOIhGjCA/VxjTN5VBSEN4W4zyhWF/7xSU=
go.cypherpunks.ru/recfile v0.3.0/go.mod h1:p1ZUMeyQQbQg+ICtKH3+Zt59QLI0tCZYZj/75Vp1buk=
+go.cypherpunks.ru/tai64n v0.1.0 h1:XT1ys6lbo4/bjDQpMA8Xu5TCx6Y6aAYYYn5G0quE8sk=
+go.cypherpunks.ru/tai64n v0.1.0/go.mod h1:mjuUq/ZQAOEKvzAAl25RIrN6JExWA4fRkOs7o7OVvYE=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9 h1:phUcVbl53swtrUN8kQEXFhUxPlIlWyBfKmidCu7P95o=
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
import (
"bufio"
- "encoding/hex"
"errors"
"flag"
"fmt"
"time"
"go.cypherpunks.ru/recfile"
+ "go.cypherpunks.ru/tai64n"
"golang.org/x/sys/unix"
)
go func() {
scanner := bufio.NewScanner(stderr)
var line string
- ts := new(TAI64N)
+ ts := new(tai64n.TAI64N)
for scanner.Scan() {
line = scanner.Text()
if strings.HasPrefix(line, childStderrPrefix) {
continue
}
if fdStderr != nil {
- tai64nNow(ts)
+ tai64n.FromTime(time.Now(), ts)
LogMutex.Lock()
- fmt.Fprintf(fdStderr, "@%s %s\n", hex.EncodeToString(ts[:]), line)
+ fmt.Fprintf(fdStderr, "%s %s\n", ts.Encode(), line)
LogMutex.Unlock()
}
if StderrSilent {
import (
"bufio"
- "encoding/binary"
- "encoding/hex"
- "errors"
"io"
"strings"
"time"
-)
-const (
- TAI64NSize = 12
- TAI64NBase = 0x400000000000000a
- TAI64NLocalFmt = "2006-01-02 15:04:05.000000000"
+ "go.cypherpunks.ru/tai64n"
)
-type TAI64N [TAI64NSize]byte
-
-func tai64nNow(ts *TAI64N) {
- t := time.Now()
- binary.BigEndian.PutUint64(ts[:], uint64(TAI64NBase)+uint64(t.Unix()))
- binary.BigEndian.PutUint32(ts[8:], uint32(t.Nanosecond()))
-}
-
func tai64nLocal(dst io.StringWriter, src io.Reader) error {
scanner := bufio.NewScanner(src)
var err error
var s string
var sep int
- var ts []byte
- var secs int64
- var nano int64
var t time.Time
for {
if !scanner.Scan() {
if sep == -1 {
dst.WriteString(s + "\n")
}
- ts, err = hex.DecodeString(s[1:sep])
+ t, err = tai64n.Decode(s[1:sep])
if err != nil {
return err
}
- if len(ts) != TAI64NSize {
- return errors.New("invalid ts length")
- }
- secs = int64(binary.BigEndian.Uint64(ts[:8]))
- nano = int64(binary.BigEndian.Uint32(ts[8:]))
- t = time.Unix(secs-TAI64NBase, nano)
- dst.WriteString(t.Format(TAI64NLocalFmt) + s[sep:] + "\n")
+ dst.WriteString(t.Format(tai64n.LocalFmt) + s[sep:] + "\n")
}
return nil
}