repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

commit
a5dd2ed
parent
8c509c5
author
Eric Bower
date
2025-01-29 06:58:43 -0500 EST
chore(prose): better log stmts
2 files changed,  +56, -32
M auth/api.go
+5, -3
 1@@ -694,21 +694,23 @@ func metricDrainSub(ctx context.Context, dbpool db.DB, logger *slog.Logger, secr
 2 			line := scanner.Text()
 3 			clean := strings.TrimSpace(line)
 4 
 5+			fmt.Println(line)
 6+
 7 			visit, err := accessLogToVisit(dbpool, clean)
 8 			if err != nil {
 9-				// logger.Debug("could not convert access log to a visit", "err", err)
10+				logger.Info("could not convert access log to a visit", "err", err)
11 				continue
12 			}
13 
14 			logger.Info("received visit", "visit", visit)
15 			err = shared.AnalyticsVisitFromVisit(visit, dbpool, secret)
16 			if err != nil {
17-				// logger.Debug("could not record analytics visit", "err", err)
18+				logger.Info("could not record analytics visit", "err", err)
19 				continue
20 			}
21 
22 			if !strings.HasPrefix(visit.ContentType, "text/html") {
23-				// logger.Debug("invalid content type", "contentType", visit.ContentType)
24+				logger.Info("invalid content type", "contentType", visit.ContentType)
25 				continue
26 			}
27 
M prose/api.go
+51, -29
  1@@ -130,9 +130,11 @@ func blogStyleHandler(w http.ResponseWriter, r *http.Request) {
  2 		http.Error(w, "blog not found", http.StatusNotFound)
  3 		return
  4 	}
  5+	logger = shared.LoggerWithUser(logger, user)
  6+
  7 	styles, err := dbpool.FindPostWithFilename("_styles.css", user.ID, cfg.Space)
  8 	if err != nil {
  9-		logger.Info("css not found", "user", username)
 10+		logger.Info("css not found")
 11 		http.Error(w, "css not found", http.StatusNotFound)
 12 		return
 13 	}
 14@@ -141,7 +143,7 @@ func blogStyleHandler(w http.ResponseWriter, r *http.Request) {
 15 
 16 	_, err = w.Write([]byte(styles.Text))
 17 	if err != nil {
 18-		logger.Error(err.Error())
 19+		logger.Error("write to response writer", "err", err.Error())
 20 		http.Error(w, "server error", 500)
 21 	}
 22 }
 23@@ -158,6 +160,7 @@ func blogHandler(w http.ResponseWriter, r *http.Request) {
 24 		http.Error(w, "blog not found", http.StatusNotFound)
 25 		return
 26 	}
 27+	logger = shared.LoggerWithUser(logger, user)
 28 
 29 	tag := r.URL.Query().Get("tag")
 30 	pager := &db.Pager{Num: 250, Page: 0}
 31@@ -171,7 +174,7 @@ func blogHandler(w http.ResponseWriter, r *http.Request) {
 32 	posts = p.Data
 33 
 34 	if err != nil {
 35-		logger.Error(err.Error())
 36+		logger.Error("find posts", "err", err.Error())
 37 		http.Error(w, "could not fetch posts for blog", http.StatusInternalServerError)
 38 		return
 39 	}
 40@@ -185,7 +188,7 @@ func blogHandler(w http.ResponseWriter, r *http.Request) {
 41 	curl := shared.CreateURLFromRequest(cfg, r)
 42 
 43 	if err != nil {
 44-		logger.Error(err.Error())
 45+		logger.Error("render template", "err", err.Error())
 46 		http.Error(w, err.Error(), http.StatusInternalServerError)
 47 		return
 48 	}
 49@@ -203,7 +206,7 @@ func blogHandler(w http.ResponseWriter, r *http.Request) {
 50 	if err == nil {
 51 		parsedText, err := shared.ParseText(readme.Text)
 52 		if err != nil {
 53-			logger.Error(err.Error())
 54+			logger.Error("readme", "err", err.Error())
 55 		}
 56 		headerTxt.Bio = parsedText.Description
 57 		headerTxt.Layout = parsedText.Layout
 58@@ -275,7 +278,7 @@ func blogHandler(w http.ResponseWriter, r *http.Request) {
 59 
 60 	err = ts.Execute(w, data)
 61 	if err != nil {
 62-		logger.Error(err.Error())
 63+		logger.Error("template execute", "err", err.Error())
 64 		http.Error(w, err.Error(), http.StatusInternalServerError)
 65 	}
 66 }
 67@@ -295,6 +298,7 @@ func postRawHandler(w http.ResponseWriter, r *http.Request) {
 68 
 69 	dbpool := shared.GetDB(r)
 70 	logger := shared.GetLogger(r)
 71+	logger = logger.With("slug", slug)
 72 
 73 	user, err := dbpool.FindUserForName(username)
 74 	if err != nil {
 75@@ -302,6 +306,7 @@ func postRawHandler(w http.ResponseWriter, r *http.Request) {
 76 		http.Error(w, "blog not found", http.StatusNotFound)
 77 		return
 78 	}
 79+	logger = shared.LoggerWithUser(logger, user)
 80 
 81 	post, err := dbpool.FindPostWithSlug(slug, user.ID, cfg.Space)
 82 	if err != nil {
 83@@ -314,7 +319,7 @@ func postRawHandler(w http.ResponseWriter, r *http.Request) {
 84 
 85 	_, err = w.Write([]byte(post.Text))
 86 	if err != nil {
 87-		logger.Error(err.Error())
 88+		logger.Error("write to response writer", "err", err.Error())
 89 		http.Error(w, "server error", 500)
 90 	}
 91 }
 92@@ -342,6 +347,9 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
 93 		return
 94 	}
 95 
 96+	logger = shared.LoggerWithUser(logger, user)
 97+	logger = logger.With("slug", slug)
 98+
 99 	blogName := GetBlogName(username)
100 	curl := shared.CreateURLFromRequest(cfg, r)
101 
102@@ -364,7 +372,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
103 	if err == nil {
104 		footerParsed, err := shared.ParseText(footer.Text)
105 		if err != nil {
106-			logger.Error(err.Error())
107+			logger.Error("footer", "err", err.Error())
108 		}
109 		footerHTML = template.HTML(footerParsed.Html)
110 	}
111@@ -374,7 +382,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
112 	if err == nil {
113 		readmeParsed, err := shared.ParseText(readme.Text)
114 		if err != nil {
115-			logger.Error(err.Error())
116+			logger.Error("readme", "err", err.Error())
117 		}
118 		if readmeParsed.MetaData.Title != "" {
119 			blogName = readmeParsed.MetaData.Title
120@@ -388,9 +396,10 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
121 	diff := ""
122 	post, err := dbpool.FindPostWithSlug(slug, user.ID, cfg.Space)
123 	if err == nil {
124+		logger.Info("post found", "id", post.ID, "filename", post.FileSize)
125 		parsedText, err := shared.ParseText(post.Text)
126 		if err != nil {
127-			logger.Error(err.Error())
128+			logger.Error("find post with slug", "err", err.Error())
129 		}
130 
131 		if parsedText.Image != "" {
132@@ -431,6 +440,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
133 			WithStyles:   withStyles,
134 		}
135 	} else {
136+		logger.Info("post not found")
137 		notFound, err := dbpool.FindPostWithFilename("_404.md", user.ID, cfg.Space)
138 		contents := template.HTML("Oops!  we can't seem to find this post.")
139 		title := "Post not found"
140@@ -438,7 +448,7 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
141 		if err == nil {
142 			notFoundParsed, err := shared.ParseText(notFound.Text)
143 			if err != nil {
144-				logger.Error(err.Error())
145+				logger.Error("parse not found file", "err", err.Error())
146 			}
147 			if notFoundParsed.MetaData.Title != "" {
148 				title = notFoundParsed.MetaData.Title
149@@ -471,7 +481,6 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
150 			Contents:     contents,
151 			Unlisted:     true,
152 		}
153-		logger.Info("post not found", "user", username, "slug", slug)
154 		w.WriteHeader(http.StatusNotFound)
155 	}
156 
157@@ -480,12 +489,14 @@ func postHandler(w http.ResponseWriter, r *http.Request) {
158 	})
159 
160 	if err != nil {
161+		logger.Error("render template", "err", err)
162 		http.Error(w, err.Error(), http.StatusInternalServerError)
163 	}
164 
165+	logger.Info("executing template", "title", data.Title, "url", data.URL, "hasCSS", data.HasCSS)
166 	err = ts.Execute(w, data)
167 	if err != nil {
168-		logger.Error(err.Error())
169+		logger.Error("template", "err", err.Error())
170 		http.Error(w, err.Error(), http.StatusInternalServerError)
171 	}
172 }
173@@ -506,7 +517,7 @@ func readHandler(w http.ResponseWriter, r *http.Request) {
174 	}
175 
176 	if err != nil {
177-		logger.Error(err.Error())
178+		logger.Error("finding posts", "err", err.Error())
179 		http.Error(w, err.Error(), http.StatusInternalServerError)
180 		return
181 	}
182@@ -537,7 +548,7 @@ func readHandler(w http.ResponseWriter, r *http.Request) {
183 
184 	tags, err := dbpool.FindPopularTags(cfg.Space)
185 	if err != nil {
186-		logger.Error(err.Error())
187+		logger.Error("find popular tags", "err", err.Error())
188 	}
189 
190 	data := ReadPageData{
191@@ -566,7 +577,7 @@ func readHandler(w http.ResponseWriter, r *http.Request) {
192 
193 	err = ts.Execute(w, data)
194 	if err != nil {
195-		logger.Error(err.Error())
196+		logger.Error("template execute", "err", err.Error())
197 		http.Error(w, err.Error(), http.StatusInternalServerError)
198 	}
199 }
200@@ -583,6 +594,8 @@ func rssBlogHandler(w http.ResponseWriter, r *http.Request) {
201 		http.Error(w, "rss feed not found", http.StatusNotFound)
202 		return
203 	}
204+	logger = shared.LoggerWithUser(logger, user)
205+	logger.Info("fetching blog rss")
206 
207 	tag := r.URL.Query().Get("tag")
208 	pager := &db.Pager{Num: 10, Page: 0}
209@@ -596,14 +609,14 @@ func rssBlogHandler(w http.ResponseWriter, r *http.Request) {
210 	posts = p.Data
211 
212 	if err != nil {
213-		logger.Error(err.Error())
214+		logger.Error("find posts", "err", err.Error())
215 		http.Error(w, err.Error(), http.StatusInternalServerError)
216 		return
217 	}
218 
219 	ts, err := template.ParseFiles(cfg.StaticPath("html/rss.page.tmpl"))
220 	if err != nil {
221-		logger.Error(err.Error())
222+		logger.Error("template parse file", "err", err.Error())
223 		http.Error(w, err.Error(), http.StatusInternalServerError)
224 		return
225 	}
226@@ -616,7 +629,7 @@ func rssBlogHandler(w http.ResponseWriter, r *http.Request) {
227 	if err == nil {
228 		parsedText, err := shared.ParseText(readme.Text)
229 		if err != nil {
230-			logger.Error(err.Error())
231+			logger.Error("readme", "err", err.Error())
232 		}
233 		if parsedText.Title != "" {
234 			headerTxt.Title = parsedText.Title
235@@ -646,7 +659,7 @@ func rssBlogHandler(w http.ResponseWriter, r *http.Request) {
236 		}
237 		parsed, err := shared.ParseText(post.Text)
238 		if err != nil {
239-			logger.Error(err.Error())
240+			logger.Error("parse post text", "err", err.Error())
241 		}
242 
243 		footer, err := dbpool.FindPostWithFilename("_footer.md", user.ID, cfg.Space)
244@@ -654,7 +667,7 @@ func rssBlogHandler(w http.ResponseWriter, r *http.Request) {
245 		if err == nil {
246 			footerParsed, err := shared.ParseText(footer.Text)
247 			if err != nil {
248-				logger.Error(err.Error())
249+				logger.Error("parse footer text", "err", err.Error())
250 			}
251 			footerHTML = footerParsed.Html
252 		}
253@@ -690,14 +703,14 @@ func rssBlogHandler(w http.ResponseWriter, r *http.Request) {
254 
255 	rss, err := feed.ToAtom()
256 	if err != nil {
257-		logger.Error(err.Error())
258+		logger.Error("feed to atom", "err", err.Error())
259 		http.Error(w, "Could not generate atom rss feed", http.StatusInternalServerError)
260 	}
261 
262 	w.Header().Add("Content-Type", "application/atom+xml; charset=utf-8")
263 	_, err = w.Write([]byte(rss))
264 	if err != nil {
265-		logger.Error(err.Error())
266+		logger.Error("writing to response handler", "err", err.Error())
267 	}
268 }
269 
270@@ -708,14 +721,14 @@ func rssHandler(w http.ResponseWriter, r *http.Request) {
271 
272 	pager, err := dbpool.FindAllPosts(&db.Pager{Num: 25, Page: 0}, cfg.Space)
273 	if err != nil {
274-		logger.Error(err.Error())
275+		logger.Error("find all posts", "err", err.Error())
276 		http.Error(w, err.Error(), http.StatusInternalServerError)
277 		return
278 	}
279 
280 	ts, err := template.ParseFiles(cfg.StaticPath("html/rss.page.tmpl"))
281 	if err != nil {
282-		logger.Error(err.Error())
283+		logger.Error("template parse file", "err", err.Error())
284 		http.Error(w, err.Error(), http.StatusInternalServerError)
285 		return
286 	}
287@@ -771,14 +784,14 @@ func rssHandler(w http.ResponseWriter, r *http.Request) {
288 
289 	rss, err := feed.ToAtom()
290 	if err != nil {
291-		logger.Error(err.Error())
292+		logger.Error("feed to atom", "err", err.Error())
293 		http.Error(w, "Could not generate atom rss feed", http.StatusInternalServerError)
294 	}
295 
296 	w.Header().Add("Content-Type", "application/atom+xml; charset=utf-8")
297 	_, err = w.Write([]byte(rss))
298 	if err != nil {
299-		logger.Error(err.Error())
300+		logger.Error("write to response writer", "err", err.Error())
301 	}
302 }
303 
304@@ -789,14 +802,14 @@ func serveFile(file string, contentType string) http.HandlerFunc {
305 
306 		contents, err := os.ReadFile(cfg.StaticPath(fmt.Sprintf("public/%s", file)))
307 		if err != nil {
308-			logger.Error(err.Error())
309+			logger.Error("read file", "err", err.Error())
310 			http.Error(w, "file not found", 404)
311 		}
312 		w.Header().Add("Content-Type", contentType)
313 
314 		_, err = w.Write(contents)
315 		if err != nil {
316-			logger.Error(err.Error())
317+			logger.Error("write to response writer", "err", err.Error())
318 			http.Error(w, "server error", 500)
319 		}
320 	}
321@@ -835,7 +848,16 @@ func createMainRoutes(staticRoutes []shared.Route) []shared.Route {
322 
323 func imgRequest(w http.ResponseWriter, r *http.Request) {
324 	logger := shared.GetLogger(r)
325+	dbpool := shared.GetDB(r)
326 	username := shared.GetUsernameFromRequest(r)
327+	user, err := dbpool.FindUserForName(username)
328+	if err != nil {
329+		logger.Error("could not find user", "username", username)
330+		http.Error(w, "could find user", http.StatusNotFound)
331+		return
332+	}
333+	logger = shared.LoggerWithUser(logger, user)
334+
335 	destUrl, err := url.Parse(fmt.Sprintf("https://%s-prose.pgs.sh%s", username, r.URL.Path))
336 	if err != nil {
337 		logger.Error("could not parse image proxy url", "username", username)