mirror of
https://github.com/shazow/ssh-chat.git
synced 2025-04-12 15:17:16 +03:00
/uptime and /whois relative timestamps made more precise
Replaced go-humanize dependency with our own logic. Fixes #259.
This commit is contained in:
parent
14b380b473
commit
66fee99a81
8
Gopkg.lock
generated
8
Gopkg.lock
generated
@ -7,12 +7,6 @@
|
|||||||
packages = [".","golog"]
|
packages = [".","golog"]
|
||||||
revision = "61e686294e58a8698a9e1091268bb4ac1116bd5e"
|
revision = "61e686294e58a8698a9e1091268bb4ac1116bd5e"
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
name = "github.com/dustin/go-humanize"
|
|
||||||
packages = ["."]
|
|
||||||
revision = "bb3d318650d48840a39aa21a027c6630e198e626"
|
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
name = "github.com/howeyc/gopass"
|
name = "github.com/howeyc/gopass"
|
||||||
@ -46,6 +40,6 @@
|
|||||||
[solve-meta]
|
[solve-meta]
|
||||||
analyzer-name = "dep"
|
analyzer-name = "dep"
|
||||||
analyzer-version = 1
|
analyzer-version = 1
|
||||||
inputs-digest = "36fa3b8ab2269908ef899a2f5b7320cb792d3a1039cb68afc8b51becde57f850"
|
inputs-digest = "48a7f7477a28e61efdd4256fe7f426bfaf93df53b5731e905088c0e9c2f10d3b"
|
||||||
solver-name = "gps-cdcl"
|
solver-name = "gps-cdcl"
|
||||||
solver-version = 1
|
solver-version = 1
|
||||||
|
3
host.go
3
host.go
@ -8,7 +8,6 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/dustin/go-humanize"
|
|
||||||
"github.com/shazow/rateio"
|
"github.com/shazow/rateio"
|
||||||
"github.com/shazow/ssh-chat/chat"
|
"github.com/shazow/ssh-chat/chat"
|
||||||
"github.com/shazow/ssh-chat/chat/message"
|
"github.com/shazow/ssh-chat/chat/message"
|
||||||
@ -382,7 +381,7 @@ func (h *Host) InitCommands(c *chat.Commands) {
|
|||||||
c.Add(chat.Command{
|
c.Add(chat.Command{
|
||||||
Prefix: "/uptime",
|
Prefix: "/uptime",
|
||||||
Handler: func(room *chat.Room, msg message.CommandMsg) error {
|
Handler: func(room *chat.Room, msg message.CommandMsg) error {
|
||||||
room.Send(message.NewSystemMsg(humanize.Time(timeStarted), msg.From()))
|
room.Send(message.NewSystemMsg(humanSince(time.Since(timeStarted)), msg.From()))
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
19
humantime.go
Normal file
19
humantime.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package sshchat
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// humanSince returns a human-friendly relative time string
|
||||||
|
func humanSince(d time.Duration) string {
|
||||||
|
switch {
|
||||||
|
case d < time.Minute*2:
|
||||||
|
return fmt.Sprintf("%0.f seconds", d.Seconds())
|
||||||
|
case d < time.Hour*2:
|
||||||
|
return fmt.Sprintf("%0.f minutes", d.Minutes())
|
||||||
|
case d < time.Hour*48:
|
||||||
|
return fmt.Sprintf("%0.f hours", d.Hours())
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%0.f days", d.Hours()/24)
|
||||||
|
}
|
40
humantime_test.go
Normal file
40
humantime_test.go
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package sshchat
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestHumanSince(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
input time.Duration
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
time.Second * 42,
|
||||||
|
"42 seconds",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
time.Second * 60 * 5,
|
||||||
|
"5 minutes",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
time.Hour * 3,
|
||||||
|
"3 hours",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
time.Hour * 49,
|
||||||
|
"2 days",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
time.Hour * 24 * 900,
|
||||||
|
"900 days",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
if actual, expected := humanSince(test.input), test.expected; actual != expected {
|
||||||
|
t.Errorf("Got: %q; Expected: %q", actual, expected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -4,7 +4,6 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/dustin/go-humanize"
|
|
||||||
"github.com/shazow/ssh-chat/chat"
|
"github.com/shazow/ssh-chat/chat"
|
||||||
"github.com/shazow/ssh-chat/chat/message"
|
"github.com/shazow/ssh-chat/chat/message"
|
||||||
"github.com/shazow/ssh-chat/sshd"
|
"github.com/shazow/ssh-chat/sshd"
|
||||||
@ -51,7 +50,7 @@ func (i Identity) Whois() string {
|
|||||||
return "name: " + i.Name() + message.Newline +
|
return "name: " + i.Name() + message.Newline +
|
||||||
" > fingerprint: " + fingerprint + message.Newline +
|
" > fingerprint: " + fingerprint + message.Newline +
|
||||||
" > client: " + chat.SanitizeData(string(i.ClientVersion())) + message.Newline +
|
" > client: " + chat.SanitizeData(string(i.ClientVersion())) + message.Newline +
|
||||||
" > joined: " + humanize.Time(i.created)
|
" > joined: " + humanSince(time.Since(i.created)) + " ago"
|
||||||
}
|
}
|
||||||
|
|
||||||
// WhoisAdmin returns a whois description for admin users.
|
// WhoisAdmin returns a whois description for admin users.
|
||||||
@ -65,5 +64,5 @@ func (i Identity) WhoisAdmin() string {
|
|||||||
" > ip: " + ip + message.Newline +
|
" > ip: " + ip + message.Newline +
|
||||||
" > fingerprint: " + fingerprint + message.Newline +
|
" > fingerprint: " + fingerprint + message.Newline +
|
||||||
" > client: " + chat.SanitizeData(string(i.ClientVersion())) + message.Newline +
|
" > client: " + chat.SanitizeData(string(i.ClientVersion())) + message.Newline +
|
||||||
" > joined: " + humanize.Time(i.created)
|
" > joined: " + humanSince(time.Since(i.created)) + " ago"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user