Golang пример unmarshal json в map
Golang пример unmarshal json в map
req, _ := http.NewRequest(http.MethodGet, "https://api.example.com/messages", nil)
resp,_ := httpClient.Do(req)
bodyBytes, err := ioutil.ReadAll(resp.Body)
var data map[string]interface{}
err = json.Unmarshal(bodyBytes, &data)
if err != nil {
log.Fatal(err)
}
logs := data["messages"]
for _, log := range logs.([]interface{}) {
log = log.(map[string]interface{})["message"]
httpHost := log.(map[string]interface{})["http_host"]
httpStatusCode := log.(map[string]interface{})["http_response_code"].(float64)
endpoint := new(Endpoint)
endpoint.Url = httpHost.(string)
endpoint.StatusCode = int(httpStatusCode)
fmt.Println("Endpoint", endpoint.Url, endpoint.StatusCode)
}
Данный снипет показывает пример работы с json структурой типа:
Golang пример http клиента с Basic авторизацией
Golang пример http клиента с Basic авторизацией
Пример использования стандартного http клиента для проведения GET запросов с Basic авторизацией:
basicAuth := "Basic " + basicAuth("user", "password")
var netClient = &http.Client{
Timeout: time.Second * 10,
}
url := "/some-endpoint"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Add("Authorization", basicAuth)
resp, err := netClient.Do(req)
defer resp.Body.Close()
if resp.StatusCode == http.StatusOK {
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
bodyString := string(bodyBytes)
log.Println(bodyString)
}
Отправка в логи Graylog из консоли
Отправка в логи Graylog из консоли
Полезная команда для отправки по UDP логов в ваш сервер логов (на примере Graylog сервера):
echo '{"version": "1.1","host":"example.org","short_message":"A short message that helps you identify what is going on","full_message":"Backtrace here\n\nmore stuff","level":1,"_user_id":9001,"_some_info":"foo","_some_env_var":"bar"}' | gzip | nc -u -w 1 graylog-input.yourserver.com 12201
Простой pipeline для Kubernetes deployment в gitlab-ci
Простой pipeline для Kubernetes deployment в gitlab-ci
Для деплоя в Kubernetes понадобилось написать простой двухшаговый pipeline, который будет собирать Docker контейнер на первом шаге и при помощи kubectl обновлять конфигурацию deployment в шаге два. Скрипты реализации build и deploy в этой статье я упущу и только покажу общий .gitalb-ci.yml файл:
variables:
CONTAINER_IMAGE: registry.docker.com/image
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
stages:
- build
- deploy
build:
stage: build
image: docker:stable
services:
- docker:dind
script:
# этот скрипт или другие действия для сборки и отправки docker контейнера в registry
- ./docker/build.sh
deploy:
when: manual
stage: deploy
image: alpine
only:
- master
script:
- apk add --no-cache curl
- curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
- chmod +x ./kubectl
- mv ./kubectl /usr/local/bin/kubectl
# в этом шаге мы делаем установку kubeconfig и сам kubectl apply
- ./docker/deploy.sh
Простые скрипты build.sh и deploy.sh предлагается написать самостоятельно, либо же мы их рассмотрим в будущих статьях.
aleksandrzhiliaev/checker — мониторинг для веб сайта
aleksandrzhiliaev/checker — мониторинг для веб сайта
Checker — простейшая библиотека на Go, опрашивающая заданный http адрес с некоторым заданным периодом времени и отправляющая метрики на различные бекенды в зависимости от конфигурации:
- stdout — отправка названия сайта и статус кода сервиса
- StatsD — отправка метрики формата: example_com.status_code
В данный момент ведется разработка для бекенда MySQL и Prometheus.
HA Proxy load balancer и docker
HA Proxy load balancer и docker
Недавно потребовался load balancer, который прост в настройке (привет любителям пописать конфиги в nginx) и удобен в установке. Выбор пал на HA Proxy — очень удобный TCP, HTTP прокси и load balancer сервер. Также было важно правильно настроить сервер в режиме SSL Passthrough ну и для удобства развёртывния чтобы можно было использовать Docker.
Деплоим локальный сервис в Kubernetes при помощи Minikube. Установка Ingress
Деплоим локальный сервис в Kubernetes при помощи Minikube. Установка Ingress
В прошлой статье мы установили сервис echoserver и открыли порт 31933 для общения приложения с внешним миром. Но как видно использовать IP адрес и порт неудобно конечным пользователям. Давайте сделаем так, чтобы наше приложение отвечало нам если мы пишем http://example.test в браузере вместо IP адреса и порта. Для этого нам потребуется запустить Minikube, прописать IP адрес Minikube и доменное имя example.test в /etc/hosts:
Деплоим локальный сервис в Kubernetes при помощи Minikube
Деплоим локальный сервис в Kubernetes при помощи Minikube
Для работы требуется установленный Minikube и kubectl.
Запустим приложение echoserver — простой сервис, который будет отдавать нам данные нашего запроса и параметры сервера:
kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
Для того, чтобы сервис стал доступен внешнему миру есть два способа — открыть порт либо установить ingress controller и заходить на сервис через обычный URL вида http://example.test.
Сделаем для начала первый способ, во многих случаях это будет достаточно для тестирования сервисов в Kubernetes. Попробуем открыть порт:
Monkey patching в Golang
Monkey patching в Golang
Наткнулся на очень интересную библиотеку, позволяющую переопределять функции и методы у объектов для написания юнит тестов перед компиляцией. В PHP, Ruby или Python это делается довольно просто парой строк. Т.к го все же язык компилируемый и со строгой типизацией тут нужно повозиться.
Итак, устанавливаем эту библиотеку:
github.com/bouk/monkey
Пишем наш тест и «мокаем» метод http.get:
Marketplace. Скрипт учета депозитов
Marketplace. Скрипт учета депозитов
Скрипт: Скрипт учета криптодепозитов.
Скрипт позволяет проводить приём, учёт и начисление процентов на различные депозиты в разных валютах.
Текущие поддерживаемые валюты:
- Webmoney WMZ,WME,WMR,WMU,WMG,WMX — с ограничениями
- Яндекс.Деньги — с ограничениями
- Qiwi
- Perfect Money
- Bitcoin
- Ethereum
- Litecoin
- Monero
- Ripple
- Bytecoin
- Stellar
- Waves token
- Advcash
- OKPAY
- Payeer
Поставка: