This commit is contained in:
+25
-3
@@ -42,6 +42,7 @@ func run(ctx context.Context) error {
|
|||||||
defer wg.Wait()
|
defer wg.Wait()
|
||||||
for _, foo := range []func(context.Context) error{
|
for _, foo := range []func(context.Context) error{
|
||||||
s.pingAndRecord,
|
s.pingAndRecord,
|
||||||
|
s.collectGarbage,
|
||||||
s.listen,
|
s.listen,
|
||||||
} {
|
} {
|
||||||
foo := foo
|
foo := foo
|
||||||
@@ -62,10 +63,10 @@ func (s S) init(ctx context.Context) error {
|
|||||||
, addr TEXT NOT NULL UNIQUE
|
, addr TEXT NOT NULL UNIQUE
|
||||||
)`,
|
)`,
|
||||||
`CREATE TABLE IF NOT EXISTS "pinger_pings" (
|
`CREATE TABLE IF NOT EXISTS "pinger_pings" (
|
||||||
start TIMESTAMP NOT NULL
|
start TIMESTAMP NOT NULL
|
||||||
, ms NUMBER NOT NULL
|
, ms NUMBER NOT NULL
|
||||||
, ok BOOLEAN NOT NULL DEFAULT false
|
, ok BOOLEAN NOT NULL DEFAULT false
|
||||||
, to_id NUMBER
|
, to_id NUMBER
|
||||||
, FOREIGN KEY (to_id) REFERENCES "pinger_to"(id)
|
, FOREIGN KEY (to_id) REFERENCES "pinger_to"(id)
|
||||||
)`,
|
)`,
|
||||||
//`ALTER TABLE "pinger_pings" SET UNLOGGED`,
|
//`ALTER TABLE "pinger_pings" SET UNLOGGED`,
|
||||||
@@ -141,6 +142,27 @@ func (s S) listen(ctx context.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s S) collectGarbage(ctx context.Context) error {
|
||||||
|
c := time.NewTicker(time.Hour)
|
||||||
|
defer c.Stop()
|
||||||
|
|
||||||
|
for range c.C {
|
||||||
|
if _, err := s.ExecContext(ctx, `
|
||||||
|
DELETE FROM "pinger_pings"
|
||||||
|
WHERE
|
||||||
|
start < $1
|
||||||
|
AND (
|
||||||
|
ms < 100
|
||||||
|
OR ok
|
||||||
|
)
|
||||||
|
`, time.Now().Add(-1*12*time.Hour).Unix()); err != nil {
|
||||||
|
log.Println("!", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s S) pingAndRecord(ctx context.Context) error {
|
func (s S) pingAndRecord(ctx context.Context) error {
|
||||||
ctx, can := context.WithCancel(ctx)
|
ctx, can := context.WithCancel(ctx)
|
||||||
defer can()
|
defer can()
|
||||||
@@ -183,7 +205,7 @@ func (s S) pingAndRecord(ctx context.Context) error {
|
|||||||
go func() {
|
go func() {
|
||||||
for record := range records {
|
for record := range records {
|
||||||
if _, err := s.ExecContext(ctx, `
|
if _, err := s.ExecContext(ctx, `
|
||||||
INSERT INTO "pinger_pings"
|
INSERT INTO "pinger_pings"
|
||||||
(start, ms, ok, to_id)
|
(start, ms, ok, to_id)
|
||||||
VALUES
|
VALUES
|
||||||
($1, $2, $3, $4)
|
($1, $2, $3, $4)
|
||||||
|
|||||||
Reference in New Issue
Block a user