Skip to content

Commit 5ee1567

Browse files
committed
Add template for index page, fix loading metrics from file
1 parent 462077f commit 5ee1567

File tree

5 files changed

+46
-9
lines changed

5 files changed

+46
-9
lines changed

internal/server/config/config.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@ type StoreConfig struct {
1515
}
1616

1717
type Config struct {
18-
ServerAddr string `env:"ADDRESS"` //host:port
19-
Store StoreConfig
18+
ServerAddr string `env:"ADDRESS"` //host:port
19+
TemplatesAbsPath string `env:"TEMPLATES_ABS_PATH"`
20+
Store StoreConfig
2021
}
2122

2223
func newConfig() *Config {
@@ -28,6 +29,7 @@ func newConfig() *Config {
2829

2930
func (config *Config) initDefaultValues() {
3031
config.ServerAddr = "127.0.0.1:8080"
32+
config.TemplatesAbsPath = "./templates/index.html"
3133
config.Store = StoreConfig{
3234
Interval: time.Duration(300) * time.Second,
3335
File: "/tmp/devops-metrics-db.json",

internal/server/handlers/handlers.go

+12-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package handlers
33
import (
44
"encoding/json"
55
"fmt"
6+
"html/template"
67
"log"
78
"net/http"
89
"strconv"
@@ -103,7 +104,7 @@ func UpdateNotImplementedPost(rw http.ResponseWriter, request *http.Request) {
103104
rw.Write([]byte("Not implemented"))
104105
}
105106

106-
func PrintStatsValues(rw http.ResponseWriter, request *http.Request, metricsMemoryRepo storage.MetricStorager) {
107+
func PrintStatsValuesOld(rw http.ResponseWriter, request *http.Request, metricsMemoryRepo storage.MetricStorager) {
107108
htmlTemplate := `
108109
<html>
109110
<head>
@@ -126,6 +127,16 @@ func PrintStatsValues(rw http.ResponseWriter, request *http.Request, metricsMemo
126127
rw.Write([]byte(htmlPage))
127128
}
128129

130+
func PrintStatsValues(rw http.ResponseWriter, request *http.Request, metricsMemoryRepo storage.MetricStorager, templatesPath string) {
131+
t, err := template.ParseFiles(templatesPath)
132+
if err != nil {
133+
fmt.Println("Cant parse template ", err)
134+
return
135+
}
136+
137+
err = t.Execute(rw, metricsMemoryRepo.ReadAll())
138+
}
139+
129140
//JSONStatValue get stat value via json
130141
func JSONStatValue(rw http.ResponseWriter, request *http.Request, metricsMemoryRepo storage.MetricStorager) {
131142
var InputMetricsJSON struct {

internal/server/server/server.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type Server struct {
1919
startTime time.Time
2020
}
2121

22-
func newRouter(metricsMemoryRepo storage.MetricStorager) chi.Router {
22+
func newRouter(metricsMemoryRepo storage.MetricStorager, templatesPath string) chi.Router {
2323
router := chi.NewRouter()
2424

2525
router.Use(chimiddleware.RequestID)
@@ -30,7 +30,7 @@ func newRouter(metricsMemoryRepo storage.MetricStorager) chi.Router {
3030

3131
//Маршруты
3232
router.Get("/", func(writer http.ResponseWriter, request *http.Request) {
33-
handlers.PrintStatsValues(writer, request, metricsMemoryRepo)
33+
handlers.PrintStatsValues(writer, request, metricsMemoryRepo, templatesPath)
3434
})
3535

3636
//json handler
@@ -74,7 +74,7 @@ func (server *Server) Run() {
7474
if server.config.Store.Restore {
7575
metricsMemoryRepo.InitFromFile()
7676
}
77-
server.chiRouter = newRouter(metricsMemoryRepo)
77+
server.chiRouter = newRouter(metricsMemoryRepo, server.config.TemplatesAbsPath)
7878

7979
log.Fatal(http.ListenAndServe(server.config.ServerAddr, server.chiRouter))
8080
}

internal/server/storage/metricsMemoryRepo.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -176,10 +176,12 @@ func (metricsMemoryRepo MetricsMemoryRepo) InitFromFile() {
176176
}
177177
defer file.Close()
178178

179-
var stateValues map[string]MetricValue
180-
json.NewDecoder(file).Decode(&stateValues)
179+
var metricsDump map[string]MetricMap
180+
json.NewDecoder(file).Decode(&metricsDump)
181181

182-
metricsMemoryRepo.InitStateValues(stateValues)
182+
for _, metricList := range metricsDump {
183+
metricsMemoryRepo.InitStateValues(metricList)
184+
}
183185
}
184186

185187
func (metricsMemoryRepo MetricsMemoryRepo) InitStateValues(DBSchema map[string]MetricValue) {

templates/index.html

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport"
6+
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
7+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
8+
<title>All metrics</title>
9+
</head>
10+
<body>
11+
{{ range $metricType, $metricList := . }}
12+
<div class="metrics-list">
13+
<h3 class="metrics-list__header">{{ $metricType }} values:</h3>
14+
<div class="metrics-list__values" style="margin-left: 20px;">
15+
{{ range $metricID, $metricValue := $metricList }}
16+
<div class="metrics-list__value"><b>{{ $metricID }}</b>: {{ $metricValue.GetStringValue }}</div>
17+
{{ end }}
18+
</div>
19+
</div>
20+
{{ end }}
21+
</body>
22+
</html>

0 commit comments

Comments
 (0)