generated from Yandex-Practicum/go-musthave-metrics-tpl
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* рефакторинг агента по итогам встречи с ментором * рефакторинг сервера по результам встречи с ментором * реализовал инкремент 6 * исправления по результатам работы статического анализатора * реализовал iter7 * pool->poll * обновление в chi * исправление по результатам статического анализатора * ещё исправления по статическому анализатору * поправил обновление метрик * убрал лишние проверки, из-за которых не проходили значения спорядком (типа 1.8e+7) * перевел агента на json * реализовал компрессию на сервере при передаче ответов * incr8 * поправил названия * обновил чтение конфигурации для сервера * добавил методы сохранения и восстановления хранилища * наработки * наработки (не собирается) * рефакторинг сервера, тесты пройдены * наработки по инкременту 9 * небольшой комментарий * ещё рефакторинг * наработки по инкременту 9 * изменения по результам работы статического анализатора + доп вопросы + немного комментариев * накидал идею по архитектуре
- Loading branch information
1 parent
c85318f
commit fa73032
Showing
52 changed files
with
2,905 additions
and
1,275 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
*.png filter=lfs diff=lfs merge=lfs -text |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
- АРХИТЕКТУРА!!! | ||
|
||
- chi.Use хочет handler - можно ли подставить в chi http.HandlerFunc (с handlerFunc работать удобней, чем с обычным http.Handler; см compress_utils_test.go); есть ли преобразование HandlerFunc в Handler (ссылка на пример, если есть) | ||
|
||
- Куда спрятать доп.функции для тестирования (compress_utils_test.go) | ||
|
||
- Формат логов - что писать, где писть, как писать, КАК ПРОВЕРЯТЬ что разработчики не косячат и как автоматически поддерживать | ||
|
||
- w.WriteHeader(http.StatusOK) - где писать, надо ли вообще писать? (судя по всему не надо; мало ли какие мидлы дальше будут работать) | ||
|
||
- Загрузка конфигурации (flag, env) (см internal/config/server.go) - можно ли покрыть тестами (ссылка на пример, если есть; надо ли вообще? :) ) | ||
|
||
- Передача logger и инициализация в тестах log := logger.Sugar() (нормальна ли завязка на конкрентый логгер; есть ли какой-то вариант из zap для использования в тестах с упрощенной инициализацией см handler_test/TestPostUpdate.go) | ||
|
||
- BoolVar - работает хитро - значение по-умолчанию "true" ????!!! (сделал через flag.Var - не усложняю ли) | ||
|
||
- Вопрос по api - "net/http".Server.Shutdown(ctx context.Context) для чего передается контекст? для возможности cancel контекста? (например по по таймауту) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,81 @@ | ||
package main | ||
|
||
import ( | ||
"log" | ||
"context" | ||
"net/http" | ||
"os" | ||
"os/signal" | ||
"syscall" | ||
|
||
"github.com/StasMerzlyakov/go-metrics/internal/config" | ||
"github.com/StasMerzlyakov/go-metrics/internal/server" | ||
"github.com/StasMerzlyakov/go-metrics/internal/server/adapter/fs/formatter" | ||
"github.com/StasMerzlyakov/go-metrics/internal/server/adapter/http/handler" | ||
"github.com/StasMerzlyakov/go-metrics/internal/server/adapter/http/middleware/compress" | ||
"github.com/StasMerzlyakov/go-metrics/internal/server/adapter/http/middleware/logging" | ||
"github.com/StasMerzlyakov/go-metrics/internal/server/storage/memory" | ||
"github.com/StasMerzlyakov/go-metrics/internal/server/usecase" | ||
"go.uber.org/zap" | ||
) | ||
|
||
type Server interface { | ||
Start(ctx context.Context) | ||
WaitDone() | ||
} | ||
|
||
func createMiddleWareList(log *zap.SugaredLogger) []func(http.Handler) http.Handler { | ||
return []func(http.Handler) http.Handler{ | ||
logging.NewLoggingResponseMW(log), | ||
compress.NewCompressGZIPResponseMW(log), //compress.NewCompressGZIPBufferResponseMW(log), | ||
compress.NewUncompressGZIPRequestMW(log), | ||
logging.NewLoggingRequestMW(log), | ||
} | ||
} | ||
|
||
func main() { | ||
|
||
srvConf, err := server.LoadConfig() | ||
// Конфигурация | ||
srvConf, err := config.LoadServerConfig() | ||
if err != nil { | ||
log.Fatal(err) | ||
panic(err) | ||
} | ||
|
||
if err := server.CreateServer(srvConf); err != nil { | ||
panic(err) | ||
// Создаем логгер | ||
logger, err := zap.NewDevelopment() | ||
if err != nil { | ||
// вызываем панику, если ошибка | ||
panic("cannot initialize zap") | ||
} | ||
defer logger.Sync() | ||
|
||
sugarLog := logger.Sugar() | ||
|
||
// Сборка сервера | ||
storage := memory.NewStorage() | ||
|
||
backupFomratter := formatter.NewJSON(sugarLog, srvConf.FileStoragePath) | ||
backup := usecase.NewBackup(sugarLog, storage, backupFomratter) | ||
|
||
metrics := usecase.NewMetrics(storage) | ||
|
||
mwList := createMiddleWareList(sugarLog) | ||
httpHandler := handler.NewHTTP(metrics, sugarLog, mwList...) | ||
|
||
var server Server = server.NewMetricsServer(srvConf, | ||
sugarLog, | ||
httpHandler, | ||
metrics, | ||
backup) | ||
|
||
// Запуск сервера | ||
ctx, cancelFn := context.WithCancel(context.Background()) | ||
exit := make(chan os.Signal, 1) | ||
signal.Notify(exit, os.Interrupt, syscall.SIGTERM) | ||
|
||
server.Start(ctx) | ||
defer func() { | ||
cancelFn() | ||
server.WaitDone() | ||
}() | ||
<-exit | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.