Skip to content

Commit 5074764

Browse files
committed
Update text index
1 parent 98341c4 commit 5074764

File tree

2 files changed

+47
-14
lines changed

2 files changed

+47
-14
lines changed

src/packages.gleam

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ fn server() {
6262
|> mist.start_http
6363

6464
// Start syncing new releases periodically
65-
let assert Ok(_) = start_hex_syncer(database, key)
65+
let assert Ok(_) = start_hex_syncer(database, index, key)
6666

6767
// Put the main process to sleep while the web server handles traffic
6868
process.sleep_forever()
@@ -94,17 +94,24 @@ fn database_path() {
9494
}
9595
}
9696

97-
fn start_hex_syncer(db: storage.Database, api_key: String) -> Result(_, _) {
97+
fn start_hex_syncer(
98+
db: storage.Database,
99+
text_search: text_search.TextSearchIndex,
100+
api_key: String,
101+
) -> Result(_, _) {
98102
supervise(fn() {
99-
let sync = fn() { syncing.sync_new_gleam_releases(api_key, db) }
103+
let sync = fn() {
104+
syncing.sync_new_gleam_releases(api_key, db, text_search)
105+
}
100106
periodic.periodically(do: sync, waiting: 60 * 1000)
101107
})
102108
}
103109

104110
fn sync_one(package_name: String) -> Nil {
105111
let db = storage.initialise(database_path())
112+
let index = text_search.new()
106113
let assert Ok(key) = envoy.get("HEX_API_KEY")
107114
let assert Ok(Nil) =
108-
syncing.fetch_and_sync_package(db, package_name, secret: key)
115+
syncing.fetch_and_sync_package(db, index, package_name, secret: key)
109116
Nil
110117
}

src/packages/syncing.gleam

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import gleam/http/request
77
import gleam/int
88
import gleam/json
99
import gleam/list
10+
import gleam/option
1011
import gleam/order
1112
import gleam/result
1213
import gleam/string
1314
import gleam/uri
1415
import packages/error.{type Error}
1516
import packages/storage.{type Database}
17+
import packages/text_search
1618
import wisp
1719

1820
pub fn try(a: Result(a, e), f: fn(a) -> Result(b, e)) -> Result(b, e) {
@@ -30,23 +32,26 @@ type State {
3032
hex_api_key: String,
3133
last_logged: Time,
3234
db: storage.Database,
35+
text_search: text_search.TextSearchIndex,
3336
)
3437
}
3538

3639
pub fn sync_new_gleam_releases(
3740
hex_api_key: String,
3841
db: Database,
42+
text_search: text_search.TextSearchIndex,
3943
) -> Result(Nil, Error) {
4044
wisp.log_info("Syncing new releases from Hex")
4145
use limit <- try(storage.get_most_recent_hex_timestamp(db))
4246
use latest <- try(
4347
sync_packages(State(
4448
page: 1,
45-
limit: limit,
49+
limit:,
4650
newest: limit,
47-
hex_api_key: hex_api_key,
51+
hex_api_key:,
4852
last_logged: birl.now(),
49-
db: db,
53+
db:,
54+
text_search:,
5055
)),
5156
)
5257
let latest = storage.upsert_most_recent_hex_timestamp(db, latest)
@@ -56,12 +61,23 @@ pub fn sync_new_gleam_releases(
5661

5762
pub fn fetch_and_sync_package(
5863
db: storage.Database,
64+
text_search: text_search.TextSearchIndex,
5965
package_name: String,
6066
secret hex_api_key: String,
6167
) -> Result(Nil, Error) {
68+
let state =
69+
State(
70+
page: 0,
71+
limit: birl.now(),
72+
newest: birl.now(),
73+
hex_api_key:,
74+
last_logged: birl.now(),
75+
db:,
76+
text_search:,
77+
)
6278
use package <- try(get_api_package(package_name, secret: hex_api_key))
6379
wisp.log_info("Syncing package data from Hex")
64-
use _ <- try(sync_single_package(db, package, hex_api_key))
80+
use _ <- try(sync_single_package(state, package, hex_api_key))
6581
wisp.log_info("Done")
6682
Ok(Nil)
6783
}
@@ -176,15 +192,15 @@ fn sync_package(state: State, package: hexpm.Package) -> Result(State, Error) {
176192
Ok(state)
177193
}
178194
_ -> {
179-
use _ <- try(insert_package_and_releases(package, releases, state.db))
195+
use _ <- try(insert_package_and_releases(package, releases, state))
180196
let state = State(..state, last_logged: birl.now())
181197
Ok(state)
182198
}
183199
}
184200
}
185201

186202
fn sync_single_package(
187-
db: storage.Database,
203+
state: State,
188204
package: hexpm.Package,
189205
secret hex_api_key: String,
190206
) -> Result(Nil, Error) {
@@ -195,7 +211,7 @@ fn sync_single_package(
195211
Ok(Nil)
196212
}
197213
_ -> {
198-
use _ <- try(insert_package_and_releases(package, releases, db))
214+
use _ <- try(insert_package_and_releases(package, releases, state))
199215
Ok(Nil)
200216
}
201217
}
@@ -231,7 +247,7 @@ fn log_if_needed(state: State, time: Time) -> State {
231247
fn insert_package_and_releases(
232248
package: hexpm.Package,
233249
releases: List(hexpm.Release),
234-
db: storage.Database,
250+
state: State,
235251
) -> Result(Nil, Error) {
236252
let assert Ok(latest) =
237253
releases
@@ -243,10 +259,20 @@ fn insert_package_and_releases(
243259
|> string.join(", v")
244260
wisp.log_info("Saving " <> package.name <> " v" <> versions)
245261

246-
use _ <- try(storage.upsert_package_from_hex(db, package, latest.version))
262+
use _ <- try(text_search.update(
263+
state.text_search,
264+
package.name,
265+
package.meta.description |> option.unwrap(""),
266+
))
267+
268+
use _ <- try(storage.upsert_package_from_hex(
269+
state.db,
270+
package,
271+
latest.version,
272+
))
247273

248274
releases
249-
|> list.try_each(storage.upsert_release(db, package.name, _))
275+
|> list.try_each(storage.upsert_release(state.db, package.name, _))
250276
}
251277

252278
fn lookup_release(

0 commit comments

Comments
 (0)