tracing
This commit is contained in:
parent
3b957a8364
commit
bf2e5e9f85
|
@ -0,0 +1,39 @@
|
||||||
|
# Twitter
|
||||||
|
TWITTER_CONSUMER_TOKEN=
|
||||||
|
TWITTER_CONSUMER_SECRET=
|
||||||
|
TWITTER_API_KEY=
|
||||||
|
TWITTER_API_SECRET=
|
||||||
|
|
||||||
|
# Mastodon
|
||||||
|
MASTODON_INSTANCE=
|
||||||
|
MASTODON_APP_ID=
|
||||||
|
MASTODON_APP_SECRET=
|
||||||
|
MASTODON_TOKEN=
|
||||||
|
MASTODON_ACCOUNT=
|
||||||
|
|
||||||
|
# Gitea
|
||||||
|
GITEA_INSTANCE=
|
||||||
|
GITEA_API_TOKEN=
|
||||||
|
|
||||||
|
# Github
|
||||||
|
GITHUB_TOKEN=
|
||||||
|
|
||||||
|
# Reddit
|
||||||
|
REDDIT_APP_ID=
|
||||||
|
REDDIT_APP_SECRET=
|
||||||
|
REDDIT_USERNAME=
|
||||||
|
REDDIT_PASSWORD=
|
||||||
|
|
||||||
|
# Patreon
|
||||||
|
PATREON_CLIENT_ID=
|
||||||
|
PATREON_CLIENT_SECRET=
|
||||||
|
PATREON_ACCESS_TOKEN=
|
||||||
|
PATREON_REFRESH_TOKEN=
|
||||||
|
|
||||||
|
# Paseto
|
||||||
|
# Generate with ./tools/paseto-key-gen.go
|
||||||
|
PASETO_PUBLIC_KEY=
|
||||||
|
PASETO_PRIVATE_KEY=
|
||||||
|
|
||||||
|
# Discord
|
||||||
|
DISCORD_WEBHOOK=
|
|
@ -0,0 +1,12 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
r "gopkg.in/rethinkdb/rethinkdb-go.v6"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
r.SetVerbose(true)
|
||||||
|
r.Log.Out = os.Stderr
|
||||||
|
}
|
|
@ -12,6 +12,7 @@ import (
|
||||||
|
|
||||||
"github.com/facebookarchive/flagenv"
|
"github.com/facebookarchive/flagenv"
|
||||||
_ "github.com/joho/godotenv/autoload"
|
_ "github.com/joho/godotenv/autoload"
|
||||||
|
"golang.org/x/net/trace"
|
||||||
r "gopkg.in/rethinkdb/rethinkdb-go.v6"
|
r "gopkg.in/rethinkdb/rethinkdb-go.v6"
|
||||||
"within.website/ln"
|
"within.website/ln"
|
||||||
"within.website/ln/ex"
|
"within.website/ln/ex"
|
||||||
|
@ -47,6 +48,7 @@ var (
|
||||||
func main() {
|
func main() {
|
||||||
flagenv.Parse()
|
flagenv.Parse()
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
ln.AddFilter(ex.NewGoTraceLogger())
|
||||||
|
|
||||||
http.DefaultTransport = useragent.Transport("mi-posse", "https://"+*domain+"/.within/botinfo", http.DefaultTransport)
|
http.DefaultTransport = useragent.Transport("mi-posse", "https://"+*domain+"/.within/botinfo", http.DefaultTransport)
|
||||||
|
|
||||||
|
@ -102,6 +104,14 @@ func main() {
|
||||||
mi.RegisterRoutes()
|
mi.RegisterRoutes()
|
||||||
sc := switchcounter.New(session, mux)
|
sc := switchcounter.New(session, mux)
|
||||||
|
|
||||||
|
mux.HandleFunc("/debug/requests", func(rw http.ResponseWriter, req *http.Request) {
|
||||||
|
trace.Render(rw, req, true)
|
||||||
|
})
|
||||||
|
|
||||||
|
mux.HandleFunc("/debug/events", func(rw http.ResponseWriter, req *http.Request) {
|
||||||
|
trace.RenderEvents(rw, req, true)
|
||||||
|
})
|
||||||
|
|
||||||
mux.HandleFunc("/.within/tokeninfo", func(rw http.ResponseWriter, req *http.Request) {
|
mux.HandleFunc("/.within/tokeninfo", func(rw http.ResponseWriter, req *http.Request) {
|
||||||
tokenData := req.Context().Value(tokenKey)
|
tokenData := req.Context().Value(tokenKey)
|
||||||
json.NewEncoder(rw).Encode(tokenData)
|
json.NewEncoder(rw).Encode(tokenData)
|
||||||
|
@ -153,8 +163,10 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
h := &http.Server{
|
h := &http.Server{
|
||||||
Addr: ":" + *port,
|
Addr: ":" + *port,
|
||||||
Handler: ex.HTTPLog(pm),
|
Handler: GoTraceMiddleware{
|
||||||
|
next: ex.HTTPLog(pm),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
go func() { ln.FatalErr(ctx, h.ListenAndServe()) }()
|
go func() { ln.FatalErr(ctx, h.ListenAndServe()) }()
|
||||||
|
|
|
@ -77,21 +77,9 @@ func (mi *Mi) StreamMastodon(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type MastodonStatus struct {
|
|
||||||
ID float64 `json:"id"`
|
|
||||||
InReplyToID *float64 `json:"in_reply_to_id"`
|
|
||||||
Account struct {
|
|
||||||
Acct string `json:"acct"`
|
|
||||||
} `json:"account"`
|
|
||||||
URL string `json:"url"`
|
|
||||||
Content string `json:"content"`
|
|
||||||
Sensitive bool `json:"sensitive"`
|
|
||||||
Application *madon.Application `json:"application"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type NewStatus struct {
|
type NewStatus struct {
|
||||||
NewVal *MastodonStatus `json:"new_val"`
|
NewVal *madon.Status `json:"new_val"`
|
||||||
OldVal *MastodonStatus `json:"old_val"`
|
OldVal *madon.Status `json:"old_val"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mi *Mi) PushMastodon(ctx context.Context, p Post) error {
|
func (mi *Mi) PushMastodon(ctx context.Context, p Post) error {
|
||||||
|
@ -135,6 +123,10 @@ func (mi *Mi) StreamMastodonToTwitter(ctx context.Context) {
|
||||||
|
|
||||||
st := ns.NewVal
|
st := ns.NewVal
|
||||||
|
|
||||||
|
if st.Visibility != "public" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if st.Application.Name == "mi_irl" {
|
if st.Application.Name == "mi_irl" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/o1egl/paseto/v2"
|
"github.com/o1egl/paseto/v2"
|
||||||
"golang.org/x/crypto/ed25519"
|
"golang.org/x/crypto/ed25519"
|
||||||
|
"golang.org/x/net/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -18,6 +19,17 @@ var (
|
||||||
pasetoPrivateKey = flag.String("paseto-private-key", "", "Paseto private key")
|
pasetoPrivateKey = flag.String("paseto-private-key", "", "Paseto private key")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type GoTraceMiddleware struct{ next http.Handler }
|
||||||
|
|
||||||
|
func (gtm GoTraceMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
ctx := r.Context()
|
||||||
|
tr := trace.New("http", r.URL.Path)
|
||||||
|
ctx = trace.NewContext(ctx, tr)
|
||||||
|
r = r.WithContext(ctx)
|
||||||
|
gtm.next.ServeHTTP(w, r)
|
||||||
|
tr.Finish()
|
||||||
|
}
|
||||||
|
|
||||||
type PasetoMiddleware struct {
|
type PasetoMiddleware struct {
|
||||||
next http.Handler
|
next http.Handler
|
||||||
pubKey ed25519.PublicKey
|
pubKey ed25519.PublicKey
|
||||||
|
@ -74,6 +86,8 @@ func init() {
|
||||||
"/static/gruvbox.css": true,
|
"/static/gruvbox.css": true,
|
||||||
"/static/favicon.ico": true,
|
"/static/favicon.ico": true,
|
||||||
"/static/favicon.png": true,
|
"/static/favicon.png": true,
|
||||||
|
"/debug/requests": true,
|
||||||
|
"/debug/events": true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
go.mod
1
go.mod
|
@ -22,6 +22,7 @@ require (
|
||||||
github.com/olekukonko/tablewriter v0.0.4 // indirect
|
github.com/olekukonko/tablewriter v0.0.4 // indirect
|
||||||
github.com/turnage/graw v0.0.0-20191224200831-a592320d5bc9
|
github.com/turnage/graw v0.0.0-20191224200831-a592320d5bc9
|
||||||
golang.org/x/crypto v0.0.0-20200109152110-61a87790db17
|
golang.org/x/crypto v0.0.0-20200109152110-61a87790db17
|
||||||
|
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553
|
||||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
|
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
|
||||||
gopkg.in/mxpv/patreon-go.v1 v1.0.0-20171031001022-1d2f253ac700
|
gopkg.in/mxpv/patreon-go.v1 v1.0.0-20171031001022-1d2f253ac700
|
||||||
gopkg.in/rethinkdb/rethinkdb-go.v6 v6.0.0
|
gopkg.in/rethinkdb/rethinkdb-go.v6 v6.0.0
|
||||||
|
|
|
@ -36,6 +36,7 @@ func (s *Switches) Switch(ctx context.Context, who string) (Switch, Switch, erro
|
||||||
var lastSw Switch
|
var lastSw Switch
|
||||||
var currentSw Switch
|
var currentSw Switch
|
||||||
|
|
||||||
|
ln.Log(ctx, ln.Info("getting last switch"))
|
||||||
res, err := r.Table("switches").
|
res, err := r.Table("switches").
|
||||||
OrderBy(r.Desc("started_at")).
|
OrderBy(r.Desc("started_at")).
|
||||||
Limit(1).
|
Limit(1).
|
||||||
|
@ -49,6 +50,12 @@ func (s *Switches) Switch(ctx context.Context, who string) (Switch, Switch, erro
|
||||||
return lastSw, currentSw, err
|
return lastSw, currentSw, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f := ln.F{
|
||||||
|
"from": lastSw.Who,
|
||||||
|
"to": who,
|
||||||
|
}
|
||||||
|
ln.Log(ctx, f, ln.Info("got last switch"))
|
||||||
|
|
||||||
now := time.Now().UTC()
|
now := time.Now().UTC()
|
||||||
lastSw.EndedAt = &now
|
lastSw.EndedAt = &now
|
||||||
lastSw.Duration = now.Sub(lastSw.StartedAt).Round(time.Second)
|
lastSw.Duration = now.Sub(lastSw.StartedAt).Round(time.Second)
|
||||||
|
@ -72,6 +79,8 @@ func (s *Switches) Switch(ctx context.Context, who string) (Switch, Switch, erro
|
||||||
return lastSw, currentSw, err
|
return lastSw, currentSw, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ln.Log(ctx, f, ln.Info("switched"))
|
||||||
|
|
||||||
return lastSw, currentSw, nil
|
return lastSw, currentSw, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue