GitHub API — полезные примеры curl запросов с releases API
GitHub API — полезные примеры curl запросов с releases API
Очередная подборка полезных curl запросов для работы с GitHub API:
- Получить объект 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"\"')')" - Получить uploadUrl для загрузки нового asset в данный release объект:
uploadUrl="$(jq -r '.upload_url' <<< "${release}")" - Удаление 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.
Unit тесты для zap логгера в Golang
Unit тесты для zap логгера в Golang
Zap — популярная в Go лог система, написанная убером.
Задача, которая однажды встала передо мной — как проверить что все нужные сообщения логгера были вызваны в коде?
Для этого я нашел решение как сам zap тестирует свою логику — при помощи zap observer:
obs, logs := observer.New(zap.InfoLevel) logger := zap.New(obs)
Теперь нам нужно запустить наш код и потом проверить полученные сообщения логгера в observer:
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.
Bitcoin alert — добавлена команда CURRENT
Bitcoin alert — добавлена команда CURRENT
При помощи Telegram бота Bitcoin-Alert можно получать актуальные изменения минимального-максимального курса криптовалют в течение определенного промежутка времени.
В Telegram бот была добавлена команда CURRENT для получения актуального курса:
> BTC CURRENT
< Current ticker: 6775.246094
Бот поддерживает Bitcoin, Litecoin, Ethereum.
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 — корневую папку для работы файлового сервера.
Bitcoin alert — Telegram бот для получения уведомлений по изменению цен BTC, LTC, ETH
Bitcoin alert — Telegram бот для получения уведомлений по изменению цен BTC, LTC, ETH
bitcoin-alert.sassoft.ru — новый сервис для доставки уведомлений по изменению цен крупнейших по капитализации криптовалют: Bitcoin, Litecoin, Ethereum.
Для получения уведомлений достаточно просто установить бота на свой аккаунт и выбрать нужную команду:
Например, хотим получать BTC сигналы:
И все! Бот будет уведомлять о всех крупных изменениях цен:
Сниппет: Отправка 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 {
...
}
Prometheus — установка для небольшого 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 чтобы не ходить наружу.
Отправка Telegram сообщений с Go
Отправка Telegram сообщений с Go
При помощи библиотеки go-telegram-bot-api достаточно легко написать свою программу на Go для отправки сообщений в Telegram. Библиотека имеет множество реализованных методов для работы c Telegram API — отправка сообщений, загрузка изображений и медиафайлов, ответ на сообщения в группах и отслеживание новых событий в каналах.
Реализуем простую программу для отправки сообщений самому себе.
Автообновление Go проектов при помощи github-selfupdate
Автообновление Go проектов при помощи github-selfupdate
go-github-selfupdate это довольно хорошая реализация поиска и обновлений новых версий приложения если вы используете GitHub в качестве хостинга релизов. Библиотека поддерживает поиск новых semver релизов через GiHub releases.
Подключить поиск и загрузку новых обновлений достаточно просто:
- Ваш проект должен находиться на GitHub плюс очень важно чтобы новые релизы публиковались только через страницу GitHub releases (пример).
- Далее в проект добавляем переменную с номером версии.
- Теперь вызываем selfupdate библиотеку: сначала проверяем выход новых релизов (понадобится GitHub токен если проект приватный) и ,если имеются новые версии, делаем загрузку и замену исходного приложения.
- После перезагрузки вы будете использовать последнюю версию приложения.
Пример приложения:

