Skip to content

Commit 6d62b8e

Browse files
committed
provide addrbook.json
1 parent 343fd5c commit 6d62b8e

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

client/html/index.tmpl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,20 @@
6161
</div>
6262
</div>
6363
</div>
64+
<div class="accordion-item">
65+
<h3 class="accordion-header" id="headingAddrbook">
66+
<span class="accordion-button cursor-pointer" data-bs-toggle="collapse" data-bs-target="#collapseAddrbook" aria-expanded="true" aria-controls="collapseAddrbook">
67+
Addrbook
68+
</span>
69+
</h3>
70+
<div id="collapseAddrbook" class="accordion-collapse collapse show" aria-labelledby="headingAddrbook" data-bs-parent="#accordionMain">
71+
<div class="card card-body">
72+
<p>Download: <a href="/download/addrbook.json">addrbook.json</a></p>
73+
<pre class="border p-2"><code>wget -O addrbook.json https://{[{ .host }]}/download/addrbook.json --inet4-only
74+
mv addrbook.json $HOME/{[{ .generalNodeHomeName }]}/config</code></pre>
75+
</div>
76+
</div>
77+
</div>
6478
<div class="accordion-item">
6579
<h3 class="accordion-header" id="headingSnapshot">
6680
<span class="accordion-button cursor-pointer" data-bs-toggle="collapse" data-bs-target="#collapseSnapshot" aria-expanded="true" aria-controls="collapseSnapshot">
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package web_server
2+
3+
import (
4+
webtypes "github.com/bcdevtools/node-management/services/web_server/types"
5+
"github.com/bcdevtools/node-management/types"
6+
"github.com/bcdevtools/node-management/utils"
7+
"github.com/gin-gonic/gin"
8+
"github.com/pkg/errors"
9+
"net/http"
10+
"time"
11+
)
12+
13+
var cacheAddrBook *types.TimeBasedCache
14+
15+
func HandleDownloadAddrBook(c *gin.Context) {
16+
w := wrapGin(c)
17+
18+
addrBook, err := getAddrbook(w.Config())
19+
if err != nil {
20+
utils.PrintlnStdErr("ERR: failed to get addrbook.json:", err)
21+
w.PrepareDefaultErrorResponse().
22+
WithResult("failed to get addrbook.json").
23+
SendResponse()
24+
return
25+
}
26+
if addrBook == nil || len(addrBook.Addrs) == 0 {
27+
w.PrepareDefaultErrorResponse().
28+
WithHttpStatusCode(http.StatusServiceUnavailable).
29+
WithResult("failed to get addrbook.json").
30+
SendResponse()
31+
return
32+
}
33+
34+
c.Header("Content-Disposition", "attachment; filename=addrbook.json")
35+
c.JSON(http.StatusOK, addrBook)
36+
}
37+
38+
func getAddrbook(cfg webtypes.Config) (*types.AddrBook, error) {
39+
if addrBook := cacheAddrBook.GetRL(); addrBook != nil {
40+
return addrBook.(*types.AddrBook), nil
41+
}
42+
43+
addrBook, err := cacheAddrBook.UpdateWL(func() (any, error) {
44+
addrBook := &types.AddrBook{}
45+
if err := addrBook.ReadAddrBook(cfg.GetAddrBookFilePath()); err != nil {
46+
return nil, errors.Wrap(err, "failed to read addrbook")
47+
}
48+
49+
livePeers := addrBook.GetLivePeers(48 * time.Hour)
50+
51+
if len(livePeers) == 0 && cfg.Debug {
52+
// load random, include dead peers, on debug mode
53+
livePeers = addrBook.Addrs
54+
if len(livePeers) > 10 {
55+
livePeers = livePeers[:10]
56+
}
57+
}
58+
59+
addrBook.Addrs = livePeers
60+
61+
return addrBook, nil
62+
}, true)
63+
64+
if err != nil {
65+
return nil, err
66+
}
67+
68+
return addrBook.(*types.AddrBook), nil
69+
}
70+
71+
func init() {
72+
cacheAddrBook = types.NewTimeBasedCache(60 * time.Second)
73+
}

services/web_server/handle_node_peers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ func HandleApiNodeLivePeers(c *gin.Context) {
2020
if err != nil {
2121
utils.PrintlnStdErr("ERR: failed to get live peers:", err)
2222
w.PrepareDefaultErrorResponse().WithResult("failed to get live peers").SendResponse()
23+
return
2324
}
2425

2526
w.PrepareDefaultSuccessResponse(peers).SendResponse()

services/web_server/handle_web_page.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ func HandleWebIndex(c *gin.Context) {
4646
fmt.Println(chainDescriptionLines)
4747

4848
c.HTML(http.StatusOK, "index.tmpl", gin.H{
49+
"host": c.Request.Host,
4950
"title": fmt.Sprintf("%s snapshot by %s", cfg.ChainName, cfg.Brand),
5051
"description": fmt.Sprintf("Snapshot data, live-peers for %s (%s) by %s", cfg.ChainName, cfg.ChainID, cfg.Brand),
5152
"chainName": cfg.ChainName,

services/web_server/web_server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ func StartWebServer(cfg webtypes.Config) {
6060

6161
// Web
6262
r.GET("/", HandleWebIndex)
63+
r.GET("/download/addrbook.json", HandleDownloadAddrBook)
6364

6465
fmt.Println("INF: starting Web service at", binding)
6566

0 commit comments

Comments
 (0)