web: add total pages indexed to home page

This commit is contained in:
Drew DeVault 2022-07-11 20:40:53 +02:00
parent 13d5f95eab
commit 009b2b31d4
7 changed files with 54 additions and 5 deletions

View file

@ -7,6 +7,7 @@ import (
"time"
"git.sr.ht/~emersion/gqlclient"
"github.com/dustin/go-humanize"
"github.com/go-chi/chi"
"github.com/go-chi/chi/middleware"
@ -18,6 +19,7 @@ type IndexPage struct {
Page string
Title string
Query string
Npage string
}
type SearchPage struct {
@ -25,11 +27,12 @@ type SearchPage struct {
Title string
Query string
Results []query.Result
Npage string // Unused
}
type AboutPage struct {
Page string
Title string
Page string
Title string
CrawlerUA string
}
@ -57,9 +60,16 @@ func main() {
client := gqlclient.New("http://localhost:8080/query", nil)
router.Get("/", func(w http.ResponseWriter, r *http.Request) {
err := tmpl.ExecuteTemplate(w, "index.html", &IndexPage{
results, err := query.GetStats(client, r.Context())
if err != nil {
log.Println(err)
http.Error(w, "Error loading index", http.StatusInternalServerError)
return
}
err = tmpl.ExecuteTemplate(w, "index.html", &IndexPage{
Page: "index",
Title: "searchhut",
Npage: humanize.Comma(int64(results.Npages)),
})
if err != nil {
log.Println(err)
@ -99,8 +109,8 @@ func main() {
ua = ""
}
err := tmpl.ExecuteTemplate(w, "about.html", &AboutPage{
Title: "About searchhut",
Page: "about",
Title: "About searchhut",
Page: "about",
CrawlerUA: ua,
})
if err != nil {

1
go.mod
View file

@ -6,6 +6,7 @@ require (
git.sr.ht/~emersion/gqlclient v0.0.0-20220202181617-4e6e9c763dd2
git.sr.ht/~sircmpwn/getopt v1.0.0
github.com/99designs/gqlgen v0.17.12
github.com/dustin/go-humanize v1.0.0
github.com/go-chi/chi v1.5.4
github.com/go-shiori/go-readability v0.0.0-20220215145315-dd6828d2f09b
github.com/lib/pq v1.10.6

2
go.sum
View file

@ -41,6 +41,8 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g=
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-chi/chi v1.5.4 h1:QHdzF2szwjqVV4wmByUnTcsbIg7UGaQ0tPF2t5GcAIs=

View file

@ -30,7 +30,14 @@ type Result {
context: String
}
type Stats {
npages: Int!
ndomains: Int!
}
type Query {
# TODO: Add cursors
search(query: String!): [Result!]!
stats: Stats!
}

View file

@ -72,6 +72,24 @@ func (r *queryResolver) Search(ctx context.Context, query string) ([]*model.Resu
return results, nil
}
// Stats is the resolver for the stats field.
func (r *queryResolver) Stats(ctx context.Context) (*model.Stats, error) {
var stats model.Stats
if err := database.WithTx(ctx, &sql.TxOptions{
ReadOnly: true,
Isolation: 0,
}, func(tx *sql.Tx) error {
row := tx.QueryRowContext(ctx, `
SELECT
(SELECT count(*) FROM page),
(SELECT count(*) FROM domain);`)
return row.Scan(&stats.Npages, &stats.Ndomains)
}); err != nil {
return nil, err
}
return &stats, nil
}
// Page returns generated.PageResolver implementation.
func (r *Resolver) Page() generated.PageResolver { return &pageResolver{r} }

View file

@ -8,3 +8,10 @@ query Search($query: String!) {
}
}
}
query GetStats {
stats {
npages
ndomains
}
}

View file

@ -13,7 +13,11 @@
type="text"
id="q"
name="q"
{{ if .Npage }}
placeholder="Search {{.Npage}} web pages..."
{{ else }}
placeholder="Search terms..."
{{ end }}
autofocus
required
value="{{.Query}}" />