Compare commits
8 Commits
add-keyoxi
...
main
Author | SHA1 | Date | |
---|---|---|---|
49bb6cbaea | |||
38318f5dc6 | |||
db72c24de3 | |||
87170420e4 | |||
2e79ac4460 | |||
cd1f1d7b5f | |||
a3ee0b7900 | |||
114c7101d6 |
|
@ -5,7 +5,7 @@
|
||||||
tasks:
|
tasks:
|
||||||
- name: Copy build to remote
|
- name: Copy build to remote
|
||||||
ansible.builtin.copy:
|
ansible.builtin.copy:
|
||||||
src: ../build/ev
|
src: ../ev
|
||||||
dest: /usr/local/bin/ev
|
dest: /usr/local/bin/ev
|
||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
|
|
|
@ -9,12 +9,8 @@ on:
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- run: apt-get update && apt-get -y install ansible
|
- run: apt-get update && apt-get -y install ansible
|
||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
|
@ -22,15 +18,17 @@ jobs:
|
||||||
with:
|
with:
|
||||||
go-version: 1.21.1
|
go-version: 1.21.1
|
||||||
|
|
||||||
- name: Build
|
- name: Install
|
||||||
run: go build -ldflags "-s -w" -o ./build/ev ./cmd/ev
|
run: go install -ldflags "-s -w" go.sour.is/tools/cmd/ev@main
|
||||||
|
|
||||||
|
- run: mv $(go env GOPATH)/bin/ev ev
|
||||||
|
|
||||||
- name: Compress
|
- name: Compress
|
||||||
uses: https://git.sour.is/actions/ghaction-upx@v2.4.0
|
uses: https://git.sour.is/actions/ghaction-upx@v2.4.0
|
||||||
with:
|
with:
|
||||||
version: latest
|
version: latest
|
||||||
files: |
|
files: |
|
||||||
./build/ev
|
./ev
|
||||||
args: -fq
|
args: -fq
|
||||||
|
|
||||||
- name: Deploy
|
- name: Deploy
|
||||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -1,2 +1,2 @@
|
||||||
tools
|
tools
|
||||||
tmp
|
sour.is-tools
|
||||||
|
|
4
Makefile
4
Makefile
|
@ -1,6 +1,6 @@
|
||||||
export PATH:=$(shell go env GOPATH)/bin:$(PATH)
|
export PATH:=$(shell go env GOPATH)/bin:$(PATH)
|
||||||
export EV_DATA=mem:
|
export EV_DATA=mem:
|
||||||
export EV_HTTP=:8080
|
export EV_HTTP=:8085
|
||||||
export WEBFINGER_DOMAINS=localhost
|
export WEBFINGER_DOMAINS=localhost
|
||||||
|
|
||||||
.DEFAULT_GOAL := air
|
.DEFAULT_GOAL := air
|
||||||
|
@ -15,7 +15,7 @@ endif
|
||||||
air .
|
air .
|
||||||
|
|
||||||
run:
|
run:
|
||||||
go build . && ./tools
|
go build -buildvcs=true -o sour.is-tools ./cmd/ev && ./sour.is-tools
|
||||||
|
|
||||||
test:
|
test:
|
||||||
go test -cover -race ./...
|
go test -cover -race ./...
|
||||||
|
|
|
@ -179,7 +179,7 @@ func (s *service) getPending(w http.ResponseWriter, r *http.Request, peerID stri
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
span.RecordError(err)
|
span.AddEvent(err.Error())
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -204,8 +204,9 @@ func (s *service) getPending(w http.ResponseWriter, r *http.Request, peerID stri
|
||||||
peerResults.SetStreamID(aggPeer(peerID))
|
peerResults.SetStreamID(aggPeer(peerID))
|
||||||
err = s.es.Load(ctx, peerResults)
|
err = s.es.Load(ctx, peerResults)
|
||||||
if err != nil && !errors.Is(err, ev.ErrNotFound) {
|
if err != nil && !errors.Is(err, ev.ErrNotFound) {
|
||||||
span.RecordError(fmt.Errorf("peer not found: %w", err))
|
span.AddEvent("peer not found")
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req *Request
|
var req *Request
|
||||||
|
@ -221,8 +222,9 @@ func (s *service) getPending(w http.ResponseWriter, r *http.Request, peerID stri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if req == nil {
|
if req == nil {
|
||||||
span.RecordError(fmt.Errorf("request not found"))
|
span.AddEvent("request not found")
|
||||||
w.WriteHeader(http.StatusNoContent)
|
w.WriteHeader(http.StatusNoContent)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
negotiator := contentnegotiation.NewNegotiator("application/json", "text/environment", "text/plain", "text/html")
|
negotiator := contentnegotiation.NewNegotiator("application/json", "text/environment", "text/plain", "text/html")
|
||||||
|
@ -433,8 +435,8 @@ func (s *service) postResult(w http.ResponseWriter, r *http.Request, reqID strin
|
||||||
err := s.state.Use(ctx, func(ctx context.Context, state *state) error {
|
err := s.state.Use(ctx, func(ctx context.Context, state *state) error {
|
||||||
var ok bool
|
var ok bool
|
||||||
if _, ok = state.peers[peerID]; !ok {
|
if _, ok = state.peers[peerID]; !ok {
|
||||||
log.Printf("peer not found: %s\n", peerID)
|
log.Printf("peer not found: req=%s peer=%s\n", reqID, peerID)
|
||||||
return fmt.Errorf("peer not found: %s", peerID)
|
return fmt.Errorf("peer not found: req=%s peer=%s", reqID, peerID)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -448,9 +450,10 @@ func (s *service) postResult(w http.ResponseWriter, r *http.Request, reqID strin
|
||||||
peerResults := &PeerResults{}
|
peerResults := &PeerResults{}
|
||||||
peerResults.SetStreamID(aggPeer(peerID))
|
peerResults.SetStreamID(aggPeer(peerID))
|
||||||
err = s.es.Load(ctx, peerResults)
|
err = s.es.Load(ctx, peerResults)
|
||||||
if err != nil {
|
if err != nil && !errors.Is(err, ev.ErrNotFound) {
|
||||||
span.RecordError(fmt.Errorf("peer not found: %w", err))
|
span.RecordError(fmt.Errorf("peer not found: req=%s peer=%s %w", reqID, peerID, err))
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if peerResults.Has(reqID) {
|
if peerResults.Has(reqID) {
|
||||||
|
|
|
@ -4,10 +4,13 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"log"
|
"log"
|
||||||
|
"log/slog"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"go.sour.is/pkg/env"
|
||||||
"go.sour.is/pkg/lg"
|
"go.sour.is/pkg/lg"
|
||||||
"go.sour.is/pkg/service"
|
"go.sour.is/pkg/service"
|
||||||
)
|
)
|
||||||
|
@ -27,6 +30,13 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func run(ctx context.Context) error {
|
func run(ctx context.Context) error {
|
||||||
|
// TODO: make this configurable.
|
||||||
|
level := slog.LevelError
|
||||||
|
if ok, _ := strconv.ParseBool(env.Default("LOG_DEBUG", "FALSE")); ok {
|
||||||
|
level = slog.LevelDebug
|
||||||
|
}
|
||||||
|
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level})))
|
||||||
|
|
||||||
svc := &service.Harness{}
|
svc := &service.Harness{}
|
||||||
ctx, stop := lg.Init(ctx, appName)
|
ctx, stop := lg.Init(ctx, appName)
|
||||||
svc.OnStop(stop)
|
svc.OnStop(stop)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
// <script src="https://unpkg.com/htmx.org@1.9.2" integrity="sha384-L6OqL9pRWyyFU3+/bjdSri+iIphTN/bvYyM37tICVyOJkWZLpP2vGn6VUEXgzg6h" crossorigin="anonymous"></script>
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
1
tmp/build-errors.log
Normal file
1
tmp/build-errors.log
Normal file
|
@ -0,0 +1 @@
|
||||||
|
exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1
|
Loading…
Reference in New Issue
Block a user