Skip to content

Commit

Permalink
restapi first release
Browse files Browse the repository at this point in the history
  • Loading branch information
SuperBuker authored and a3s7p committed Oct 6, 2022
1 parent 0cfbd71 commit 770f094
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 14 deletions.
25 changes: 14 additions & 11 deletions contractmanager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/wireleap/common/api/client"
"github.com/wireleap/common/api/status"
"github.com/wireleap/common/api/texturl"
"github.com/wireleap/common/cli/fsdir"
"github.com/wireleap/common/cli/upgrade"
"github.com/wireleap/relay/api/epoch"
Expand Down Expand Up @@ -186,21 +187,22 @@ type netFns struct {

// Contract Manager Status
type managerStatus struct {
ControllerStarted bool
Since *int64
Until *int64
GlobalCap *uint64
GlobalUsage *uint64
RelayStatus []relayStatus
ControllerStarted bool `json:"controller_started"`
Since *int64 `json:"timeframe_since"`
Until *int64 `json:"timeframe_until"`
GlobalCap *uint64 `json:"global_network_usage"`
GlobalUsage *uint64 `json:"global_network_usage"`
RelayStatus []relayStatus `json:"relay_status"`
}

// Relay status extended
type relayStatus struct {
Id string
Role string
Status relaylib.RelayFlags
NetCap *uint64
NetUsage uint64
Id string `json:"id"`
Addr *texturl.URL `json:"addr"`
Role string `json:"role"`
Status relaylib.RelayFlags `json:"status"`
NetCap *uint64 `json:"network_cap"`
NetUsage uint64 `json:"netowrk_usage"`
}

// Contract Manager
Expand Down Expand Up @@ -665,6 +667,7 @@ func (m *Manager) Status() (ms managerStatus) {

mrs = append(mrs, relayStatus{
Id: cid,
Addr: rs.Addr,
Role: rs.Role,
Status: rs.Flags,
NetCap: nc,
Expand Down
1 change: 1 addition & 0 deletions filenames/filenames.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const (
TLSCert = "relay-cert.pem"
TLSKey = "relay-key.pem"
Sharetokens = "sharetokens"
Socket = "wireleap-relay.socket"
Log = "wireleap-relay.log"
Stats = "stats.json"
)
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ go 1.16
require (
github.com/blang/semver v3.5.1+incompatible
github.com/c2h5oh/datasize v0.0.0-20200825124411-48ed595a09d2
github.com/wireleap/common v0.3.3
github.com/wireleap/common v0.3.5
)
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdn
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/c2h5oh/datasize v0.0.0-20200825124411-48ed595a09d2 h1:t8KYCwSKsOEZBFELI4Pn/phbp38iJ1RRAkDFNin1aak=
github.com/c2h5oh/datasize v0.0.0-20200825124411-48ed595a09d2/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M=
github.com/wireleap/common v0.3.3 h1:fWQNLiVMG1z15EP3UPZGDROYs36AM9GQXNS4+cGxD2Q=
github.com/wireleap/common v0.3.3/go.mod h1:bL+o0kyAOn+4ZCtAlWY3YvKhxztfXoA//BFOvqKOsgI=
github.com/wireleap/common v0.3.5 h1:U1G7HrHvwdVVeoCpEFqxm5yfZ9JCSt9T2HiQmeolYSo=
github.com/wireleap/common v0.3.5/go.mod h1:bL+o0kyAOn+4ZCtAlWY3YvKhxztfXoA//BFOvqKOsgI=
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a h1:kr2P4QFmQr29mSLA43kwrOcgcReGTfbE9N577tCTuBc=
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
Expand Down
74 changes: 74 additions & 0 deletions restapi/restapi.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
// Copyright (c) 2022 Wireleap

package restapi

import (
"encoding/json"
"log"
"net"
"net/http"
"os"

"github.com/wireleap/common/api/provide"
"github.com/wireleap/common/api/status"
"github.com/wireleap/relay/contractmanager"
)

type T struct {
manager *contractmanager.Manager
l *log.Logger
mux *http.ServeMux
}

func (t *T) reply(w http.ResponseWriter, x interface{}) {
b, err := json.Marshal(x)
if err != nil {
t.l.Printf("error %s while serving reply", err)
status.ErrInternal.WriteTo(w) //err to check
return
}
w.Write(b) //err to check
}

func New(manager *contractmanager.Manager) (t *T) {
t = &T{
manager: manager,
l: log.Default(),
mux: http.NewServeMux(),
}

t.mux.Handle("/api/status", provide.MethodGate(provide.Routes{http.MethodGet: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
o := t.manager.Status()
t.reply(w, o)
})}))
return
}

func UnixServer(p string, fm os.FileMode, t *T) error {
if err := os.RemoveAll(p); err != nil {
return err
}

l, err := net.Listen("unix", p)
if err != nil {
return err
}
defer l.Close()

if err := os.Chmod(p, fm); err != nil {
return err
}

h := &http.Server{Handler: t.mux}
return h.Serve(l)
}

func TCPServer(port string, t *T) error {
l, err := net.Listen("tcp", ":"+port)
if err != nil {
return err
}

h := &http.Server{Handler: t.mux}
return h.Serve(l)
}
11 changes: 11 additions & 0 deletions sub/startcmd/startcmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/wireleap/relay/filenames"
"github.com/wireleap/relay/relaycfg"
"github.com/wireleap/relay/relaylib"
"github.com/wireleap/relay/restapi"
"github.com/wireleap/relay/stscheduler"
"github.com/wireleap/relay/wlnet/relay"
)
Expand Down Expand Up @@ -211,11 +212,21 @@ func serverun(fm fsdir.T) {
r.Manager.Stop()

fm.Del(filenames.Pid)
fm.Del(filenames.Socket)
return true
}

defer shutdown()

// Launch API REST goroutine
api := restapi.New(r.Manager)
go func() {
log.Println("Launching UnixSocket Server")
if err := restapi.UnixServer(fm.Path(filenames.Socket), 0660, api); err != nil {
log.Print(err)
}
}()

// check limit on open files (includes tcp connections)
var rlim syscall.Rlimit
if err = syscall.Getrlimit(syscall.RLIMIT_NOFILE, &rlim); err == nil {
Expand Down

0 comments on commit 770f094

Please sign in to comment.