Latest Posts

GitHub API — полезные примеры curl запросов с releases API

GitHub API — полезные примеры curl запросов с releases API

Очередная подборка полезных curl запросов для работы с GitHub API:

  1. Получить объект release с выбранным tag_name:
    release="$(curl -s -X GET -H "Authorization:token ${GITHUB_TOKEN}" "https://api.github.com/repos/${GITHUB_REPO}/releases" | jq -r '.[] | select(.tag_name=='\""$TAG_NAME"\"')')"
  2. Получить uploadUrl для загрузки нового asset в данный release объект:
    uploadUrl="$(jq -r '.upload_url' <<< "${release}")"
  3. Удаление asset из release:
    existingAsset="$(curl -s -X GET -H "Authorization:token ${GITHUB_TOKEN}" "https://api.github.com/repos/${GITHUB_REPO}/releases/${releaseID}/assets" | jq -r '.[] | select(.name=='\""$ARTIFACT"\"')')"
    existingAssetID="$(jq -r '.id' <<< "${existingAsset}")"
    resp="$(curl -s -X DELETE -H "Authorization:token ${GITHUB_TOKEN}" -H "Content-Type:application/octet-stream"  "https://api.github.com/repos/${GITHUB_REPO}/releases/assets/${existingAssetID}")"
    echo "$resp"

    Для работы bash снипетов необходимо установить расширение jq, добавить GITHUB_TOKEN и GITHUB_REPO.

    Read more

Unit тесты для zap логгера в Golang

Unit тесты для zap логгера в Golang

Zap — популярная в Go лог система, написанная убером.

Задача, которая однажды встала передо мной — как проверить что все нужные сообщения логгера  были вызваны в коде?

Для этого я нашел решение как сам zap тестирует свою логику — при помощи zap observer:

obs, logs := observer.New(zap.InfoLevel)
logger := zap.New(obs)

Теперь нам нужно запустить наш код и потом проверить полученные сообщения логгера в observer:

Read more

Prometheus middleware для Chi

Prometheus middleware для Chi

Для вывода Prometheus метрик с роутера Chi нет официального Middleware. Поэтому установим расширение 766b/chi-prometheus:

// Init router
r := chi.NewRouter()
// Init middleware
...
r.Use(chiprometheus.NewMiddleware("my-api"))
...
// Init some routes
r.Get("/api", apiHandler)

Далее импортируем promhttp:

"github.com/prometheus/client_golang/prometheus/promhttp"

И регистрируем HTTP handler:

r.Handle("/metrics", promhttp.Handler())

И в принципе всё. Теперь все роуты будут проходить через chiprometheus и все данные роутера будут сохраняться для забора Prometheus.

Read more

Bitcoin alert &#8212; добавлена команда CURRENT

Bitcoin alert — добавлена команда CURRENT

При помощи Telegram бота Bitcoin-Alert можно получать актуальные изменения минимального-максимального курса криптовалют в течение определенного промежутка времени.

В Telegram бот была добавлена команда CURRENT для получения актуального курса:

> BTC CURRENT

 < Current ticker: 6775.246094

Бот поддерживает Bitcoin, Litecoin, Ethereum.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Read more

Golang: FileServer для go-chi

Golang: FileServer для go-chi

Пример работы файлового сервера для go-chi:

r := chi.NewRouter()
... ... ...
fileServer(r)
... ... ...
// fileServer is serving static files.
func fileServer(router *chi.Mux) {
	root := "./frontend"
	fs := http.FileServer(http.Dir(root))

	router.Get("/*", func(w http.ResponseWriter, r *http.Request) {
		if _, err := os.Stat(root + r.RequestURI); os.IsNotExist(err) {
			w.WriteHeader(http.StatusNotFound)
			return
		} else {
			fs.ServeHTTP(w, r)
		}
	})
}

До начала работы нужно задать root — корневую папку для работы файлового сервера.

Read more

Bitcoin alert &#8212; Telegram бот для получения уведомлений по изменению цен BTC, LTC, ETH

Bitcoin alert — Telegram бот для получения уведомлений по изменению цен BTC, LTC, ETH

bitcoin-alert.sassoft.ru — новый сервис для доставки уведомлений по изменению цен крупнейших по капитализации криптовалют: Bitcoin, Litecoin, Ethereum.

Для получения уведомлений достаточно просто установить бота на свой аккаунт и выбрать нужную команду:

2020-03-22-15-35-08

Например, хотим получать BTC сигналы:

2020-03-22-15-44-00

И все! Бот будет уведомлять о всех крупных изменениях цен:

Read more

Сниппет: Отправка POST json в Golang

Сниппет: Отправка POST json в Golang

Сниппет для POST отправки JSON string:

var jsonStr = []byte(`{"price":9899}`)

req, err := http.NewRequest(http.MethodPost, "https://example.com", bytes.NewBuffer(jsonStr))

if err != nil {
  ...
}

response, err := http.DefaultClient.Do(req)
if err != nil {
  ...
}
defer response.Body.Close()

_, err = ioutil.ReadAll(response.Body)
if err != nil {
 ...
}

 

Read more

Prometheus &#8212; установка для небольшого Kubernetes кластера

Prometheus — установка для небольшого Kubernetes кластера

Простая инструкция как установить и начать мониторинг своих сервисов для небольшого Kubernetes кластера. В данном примере мы не будем использовать Prometheus оператор, но для сложных динамичных систем и огромного количества сервисов использование оператора просто необходимо.

Для начала подготовим Prometheus.yml файл:

global:
  scrape_interval:     60s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 60s # Evaluate rules every 15 seconds. The default is every 1 minute.

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
        # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
  - job_name: 'my-service-scrapper'
    scheme: https
    static_configs:
      - targets: ['service.sassoft.ru:443']

В качестве target можно указывать как и URI сторонних сервисов так и внутренний fqdn kubernetes service name чтобы не ходить наружу.

Read more

Отправка Telegram сообщений с Go

Отправка Telegram сообщений с Go

При помощи библиотеки go-telegram-bot-api достаточно легко написать свою программу на Go для отправки сообщений в Telegram. Библиотека имеет множество реализованных методов для работы c Telegram API — отправка сообщений, загрузка изображений и медиафайлов, ответ на сообщения в группах и отслеживание новых событий в каналах.

Реализуем простую программу для отправки сообщений самому себе.

Read more

Автообновление Go проектов при помощи github-selfupdate

Автообновление Go проектов при помощи github-selfupdate

go-github-selfupdate это довольно хорошая реализация поиска и обновлений новых версий приложения если вы используете GitHub в качестве хостинга релизов. Библиотека поддерживает поиск новых semver релизов через GiHub releases.

Подключить поиск и загрузку новых обновлений достаточно просто:

  1. Ваш проект должен находиться на GitHub плюс очень важно чтобы новые релизы публиковались только через страницу GitHub releases (пример).
  2. Далее в проект добавляем переменную с номером версии.
  3. Теперь вызываем selfupdate библиотеку: сначала проверяем выход новых релизов (понадобится GitHub токен если проект приватный) и ,если имеются новые версии, делаем загрузку и замену исходного приложения.
  4. После перезагрузки вы будете использовать последнюю версию приложения.

Пример приложения:

Read more