Skip to content

Commit

Permalink
Merge pull request #33 from thefrol/iter14
Browse files Browse the repository at this point in the history
Итерация 14. Подписываем запросы
  • Loading branch information
thefrol authored Dec 16, 2023
2 parents 3d7f5f7 + c8df66e commit 9e96cc4
Show file tree
Hide file tree
Showing 42 changed files with 1,179 additions and 866 deletions.
30 changes: 26 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,34 @@

----

Это учебная работе в [Яндекс-практикуме](https://practicum.yandex.ru), в рамках которой будет реализован сервер `мяу`, и агент `тыгыдык`, а может наоборот...
Основная задача этого продукта: показать какой я классный сотрудник и как классно я подхожу на должность, на которую вы меня сейчас рассматриваете. Поэтому тут вас ждет:

## TODO
+ Фантастическая скорость работы достигается статической типизацией, использованием стека
+ Сладкая, как `торт наполеон`, и слоистая архитектура. Все зависимости идут снизу вверх. И нет циклических зависимостей. `DDD` во все поля
+ Защищает связь сервера и агента при помощи подписей `SHA256`
+ Сжимает запросы и ответы при помощи `gzip`
+ Превосходное оформление коммитов, ишью и пул-реквестов, прохождение код-ревью. Гитхаб использован как только возможно.
+ Все пакеты и функции документированы
+ Модульно, предметно ориентировано
+ Более ста тестов

0. [ ] Создать контроллер-абстрацию, с главной [логикой приложения](./internal/server/api/README.MD) собсно.
1. [ ] Дождаться завершения горутин. Как? через sync.WaitGroup()?
## Стек

+ Go: chi, http, easyjson,
+ gzip, encoding, crypto,
+ runtime, sync
+ zerolog

Это учебная работе в [Яндекс-практикуме](https://practicum.yandex.ru), поэтому такие вещи как сжатие ответа и запроса, подписывание реализовано ручками при помощи стандартных библиотек.

## Вещи которыми я горжусь

### `config.Secret`, `config.ConnectionString`

Эта структура для чувствительных данных, которая защищена от попадания в консоль. Если попытаться распечатать конфиг, то мы увидим

SecretValue:******
DataBaseString: host=localhost user=user ... // хотя тут был пароль

## Открытия

Expand Down
38 changes: 31 additions & 7 deletions cmd/agent/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,49 @@ package main

import (
"fmt"
"os"
"path"
"time"

"github.com/rs/zerolog/log"
"github.com/thefrol/kysh-kysh-meow/internal/compress"
"github.com/thefrol/kysh-kysh-meow/internal/config"
"github.com/thefrol/kysh-kysh-meow/internal/report"
"github.com/thefrol/kysh-kysh-meow/lib/scheduler"
)

const updateRoute = "/updates"

var defaultConfig = config.Agent{
Addr: "localhost:8080",
ReportInterval: 10,
PollingInterval: 2,
}

func main() {
config := mustConfigure(defaultConfig)
// Парсим командную строку и переменные окружения
config := config.Agent{}
if err := config.Parse(defaultConfig); err != nil {
log.Error().Msgf("Ошибка парсинга конфига: %v", err)
os.Exit(2)
}

// Настроим отправку
report.SetSigningKey(config.Key)
report.CompressLevel = compress.BestCompression
report.CompressMinLength = 100

// Запускаем работу
Serve(config)

}

// Endpoint формирует точку, куда агент будет посылать все запросы на основе своей текущей конфигурации
func Endpoint(cfg config.Agent) string {
return fmt.Sprintf("%s%s", "http://", path.Join(cfg.Addr, updateRoute))
}

func Serve(config config.Agent) {
// Метрики собираются во временное хранилище s,
// где они хранятся в сыром виде и готовы превратиться
// в массив metrica.Metrica
Expand All @@ -40,10 +70,4 @@ func main() {

// Запускаем планировщик, и он занимает поток
c.Serve(200 * time.Millisecond)

}

// Endpoint формирует точку, куда агент будет посылать все запросы на основе своей текущей конфигурации
func Endpoint(cfg config) string {
return fmt.Sprintf("%s%s", "http://", path.Join(cfg.Addr, updateRoute))
}
12 changes: 8 additions & 4 deletions cmd/agent/agent_test.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
package main

import "testing"
import (
"testing"

"github.com/thefrol/kysh-kysh-meow/internal/config"
)

func TestEndpoint(t *testing.T) {

tests := []struct {
name string
cfg config
cfg config.Agent
want string
}{
{
name: "positive",
cfg: config{Addr: "localhost"},
cfg: config.Agent{Addr: "localhost"},
want: "http://localhost/updates",
},
{
name: "positive 2",
cfg: config{Addr: ":8080"},
cfg: config.Agent{Addr: ":8080"},
want: "http://:8080/updates",
},
}
Expand Down
72 changes: 0 additions & 72 deletions cmd/server/config.go

This file was deleted.

Loading

0 comments on commit 9e96cc4

Please sign in to comment.