MCPcopy Create free account
hub / github.com/ethereum/node-crawler / InsertCrawledNodes

Function InsertCrawledNodes

pkg/apidb/database.go:41–121  ·  view source on GitHub ↗
(db *sql.DB, crawledNodes []crawlerdb.CrawledNode)

Source from the content-addressed store, hash-verified

39}
40
41func InsertCrawledNodes(db *sql.DB, crawledNodes []crawlerdb.CrawledNode) error {
42 log.Info("Writing nodes to db", "len", len(crawledNodes))
43
44 tx, err := db.Begin()
45 if err != nil {
46 return err
47 }
48 stmt, err := tx.Prepare(`
49 INSERT INTO nodes(
50 id,
51 name,
52 version_major,
53 version_minor,
54 version_patch,
55 version_tag,
56 version_build,
57 version_date,
58 os_name,
59 os_architecture,
60 language_name,
61 language_version,
62 last_crawled,
63 country_name
64 )
65 VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)
66 ON CONFLICT(id) DO UPDATE
67 SET
68 name = excluded.name,
69 version_major = excluded.version_major,
70 version_minor = excluded.version_minor,
71 version_patch = excluded.version_patch,
72 version_tag = excluded.version_tag,
73 version_build = excluded.version_build,
74 version_date = excluded.version_date,
75 os_name = excluded.os_name,
76 os_architecture = excluded.os_architecture,
77 language_name = excluded.language_name,
78 language_version = excluded.language_version,
79 last_crawled = excluded.last_crawled,
80 country_name = excluded.country_name
81 WHERE
82 name = excluded.name
83 OR excluded.name != "unknown"
84 `)
85 if err != nil {
86 return err
87 }
88
89 // It's possible for us to have the same node scraped multiple times, so
90 // we want to make sure when we are upserting, we get the most recent
91 // scrape upserted last.
92 sort.SliceStable(crawledNodes, func(i, j int) bool {
93 return strings.Compare(crawledNodes[i].Now, crawledNodes[j].Now) < 0
94 })
95
96 for _, node := range crawledNodes {
97 parsed := vparser.ParseVersionString(node.ClientType)
98 if parsed != nil {

Callers 1

transferNewNodesFunction · 0.92

Calls 1

ParseVersionStringFunction · 0.92

Tested by

no test coverage detected