Git Product home page Git Product logo

kysh-kysh-meow's Introduction

Go бэкендер 👋

Скорость и элегантность, вот что я люблю. Покрываю тестами и документирую. А все потому что я сам много читаю чужой код и умею в нем разобраться. Отстаиваю свою точку зрения максимально этично.


mindmap
  root(("My stack"))
    front{{"Front"}}
      vue{{"❤️ VUE.js"}}
        petitevue{{"❤️ Petite Vue"}}
      alpine{{"Alpine.js"}}
      htmlcss{{"HTML/CSS raw"}}
      tailwinf{{"TailwingCSS"}}
      telegram{{"❤️ Telegram"}}
    back["Back"]
      python["Python"]
        fastApi["FastAPI"]
        django["Django"]
        torch["torch"]
      go))"❤️ Go"((
        chi["chi"]
        gin["gin"]
      csharp["C#"]
        maui["MAUI"]
    ops["ops"]
      docker["Docker"]
      powershell["PowerShell"]
      bash["bash"]
      ffmpeg["ffmpeg"]
    misc["..."]
      AWS)"AWS"(
      Yandex.Cloud)"❤️ Yandex.Cloud"(
Loading
  • 🔭 I’m currently working on Yandex Cloud library
  • 🌱 I’m currently learning Go, sometimes html+css
  • 👯 I’m looking to collaborate on go project
  • 🤔 I’m looking for help with rewiewing minimal lib
  • 💬 Ask me about jazz
  • 📫 How to reach me: [email protected]
  • 😄 Pronouns: he/his
  • ⚡ Fun fact: was skipping sports to go to coding lessong, my father would kill me that days
  • leetcode

скриншот апплодисментов на литкоде скриншот апплодисментов по sql

kysh-kysh-meow's People

Contributors

dimakoz avatar hurd54 avatar nika-sura avatar thefrol avatar

Watchers

 avatar

kysh-kysh-meow's Issues

Тесты для агента работают с большой задержкой

На данный момент они написаны так, что создается горутина с сервером, и тест уже сзаимодействует с этим сервером, но для каждого теста вводится задержка на 2 сек, а количество тестов большое. Все это занимает секунд 20. Это много.

Можно переписать через httptest.NewServer() и defer server.Stop(), это значительно ускорит прохождение тестов и избавит от костылей вроде NewHost() и LastHost()

Глобальный контекст сервера

Было бы неплохо создать какой-то глобальный контекст сервера, чтобы не только в хендлерах его получать, но и раньше, он может пригодиться при инициализации хранилища(во время инициализации БД)

          Все операции с внешними ресурсами - потенциально долгие, так что лучше нам ими управлять, для того контекст и может пригодиться

Originally posted by @EsdeathEsdeath in #25 (comment)

Архитектурная проблема в `report`

В сервисе отправки сообщений с агента существует архитектурная проблема. В текущем контракте мы записываем в тело сообщения объект интерфейса io.Reader, это позволяет компрессирующей мидлвари правильно взять объект из тела сообщения(используем resty.SetBody(), где передается any).

Потом мы добавили фичу с повторной отправкой, она работает вот так

sendCall := func() error {
	var err error
	resp, err = defaultClient.R().SetBody(buf).Post(url)
	return err
}

Эта функция срабатывает три раза.

И что происходит. Во время первого запуска, она читает buf типа io.Reader, во время второго запуска она опять читает buf, но поскольку это поток, то теперь buf пустой. Об этом сообщает даже компрессор, которому приходят на сжатия пустые сообщения. То есть остальные три попытки мы уже пытаемя отправить невалидные сообщения. Уже проверено, что сервер их не принимает с ошибкой EOF

Нужно либо перекататься на использование []bytes

Выделить метрики вотдельный пакет

По сути метрики это не только тип данных, но ещё и поведение, и конечно стоило бы выделить их в отдельный пакет, конечно, чтобы у них была функция вроде Process

var c metrics.Counter
Counter.Process(value)

type Metricer[T any] interface {
    Process(T value)
    ProcessString(s sring) //обрабатывает на 
    FromString(s String) //? может быть!
}

Но зачем это пока не понятно, не буду я путаться в создании всех этих метрик или буду, короче хз полное

Счетчик типа Counter увеличивается джважды

При сохранении счетчика PollCount на сервере, его новое значение прибавляется к уже имеющемуся. Но и на клиенте происходит то же самое, таким образом, значение счетчика растет в арифметической прогресси, вместо прямой

Сервер принял Сервер хранил Теперь на сервере
1 0 1
2 1 3
3 3 6
4 6 10
5 10 15

Нужно понять, где мы инкрементируем счетчик

Баг проверки подписи

Если буфер слишком маленький, то подпись не сможет быть проверена. потому что в нее не весь реквест влезет.

см. SignBufferSize в мидлварях

файлы *.http

попробовать как работает .http в VSCode, это расширение в котором можно записать отправку запросов преподготовленных

Поддержка easyjson для батча метрик

В данный момент батчи парсятся обычным парсером встроенным. Это медленнее, тем временем уже назрело использование какой-то именованной структуры для []metrica.Metrica, например ещё она может иметь метод Squash(), который сжимает метрики до минимально полезного(сложить каунтеры и заменить гаужи при совпадени имен).

Мало тестов

  • Было бы неплохо написать мок тесты для БД, где например проверяются аргументы того, что мы посылаем к бд возможно.
  • тесты конкурентных паттернов в агенте
  • интегральный тест запускается и завершается агент
  • интегральный тест, связываются агент и сервер с разными ключами и с одинаковыми ключами
  • попробовать сюит тесты на тестировании конфига

SetCounter переделать в UpdateCounter

Как оказалось, агент тоже пользуется логикой сохранения метрик, а это значит, что логику, что counter должен увеличивать значение, а gauge обновлять стоит записать в какой-то общий блок. Я бы воспользовался MemStore для этого.

А лучше даже сделать это в интерфейсе Storer. Он же знает как сохранять и вызывать значение, значит сможет и хранить логику для него. Не знаю насколько это зашквар.

Плюс сервер, надо переписать так, чтобы он пользовался именно интерфейсомstorer

Ключи видны в консоли и логах

Ключ так парсится, что его легко случайно вывести в консоль случайно, а из логов его увидят злоумышленники.

Может быть сделать какой-то специальный тип данных, который имел бы тип Stringer, но возвращал звездочки. Я бы даже может возвращал не сам ключ, а коллбек возвращающий ключ, чтобы он там не попал куда не следует случаем

А ещё можно вывести конфиги в отдельный пакет, и там ключ сделать внутренней переменной, чтобы совсем не было шансов

Миграции

Попробовать goose как интрумент для миграций

PollCount собирается неправильно

Мы должны отправить сколько раз мы считали данные из памяти. Больше ничего. И не обязательно это отправлять одновременно с остальными данными. Главное если считали пять раз, то пять раз и отправили. Как например, если ошибка случилась пять раз, то мы пять раз и отправляем.

В данный момент, с учетом асинхронного сбора, можно заметить, что поллкаунт вообще не нужно сбрасывать. Агент вообще ничего не должен знать про логику метрик, он знает только о формате данных для отправки. Поэтому фактически если мы кидаем в очередь поллкаунт, то это всегда должно быть 1. Надо и пакет поллкаунт убрать

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.