Latest Posts

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 структурой типа:

Read more

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)
}

 

Read more

Отправка в логи 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

 

Leave a Comment

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

Read more

Простой 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 предлагается написать самостоятельно, либо же мы их рассмотрим в будущих статьях.

Read more

aleksandrzhiliaev/checker — мониторинг для веб сайта

aleksandrzhiliaev/checker — мониторинг для веб сайта

Checker —  простейшая библиотека на Go, опрашивающая заданный http адрес с некоторым заданным периодом времени и отправляющая метрики на различные бекенды в зависимости от конфигурации:

  • stdout — отправка названия сайта и статус кода сервиса
  • StatsD — отправка метрики формата: example_com.status_code

В данный момент ведется разработка для бекенда MySQL и Prometheus.

Read more

HA Proxy load balancer и docker

HA Proxy load balancer и docker

Недавно потребовался load balancer, который прост в настройке (привет любителям пописать конфиги в nginx) и удобен в установке. Выбор пал на HA Proxy — очень удобный TCP, HTTP прокси и load balancer сервер. Также было важно правильно настроить сервер в режиме SSL Passthrough ну и для удобства развёртывния чтобы можно было использовать Docker.

Read more

Деплоим локальный сервис в Kubernetes при помощи Minikube. Установка Ingress

Деплоим локальный сервис в Kubernetes при помощи Minikube. Установка Ingress

В прошлой статье мы установили сервис echoserver и открыли порт 31933 для общения приложения с внешним миром. Но как видно использовать IP адрес и порт неудобно конечным пользователям. Давайте сделаем так, чтобы наше приложение отвечало нам если мы пишем http://example.test в браузере вместо IP адреса и порта. Для этого нам потребуется запустить Minikube, прописать IP адрес Minikube и доменное имя example.test  в /etc/hosts:

Read more

Деплоим локальный сервис в 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. Попробуем открыть порт:

Read more

Monkey patching в Golang

Monkey patching в Golang

Наткнулся на очень интересную библиотеку, позволяющую переопределять функции и методы у объектов для написания юнит тестов перед компиляцией. В PHP, Ruby или Python это делается довольно просто парой строк. Т.к го все же язык компилируемый и со строгой типизацией тут нужно повозиться.

Итак, устанавливаем эту библиотеку:

github.com/bouk/monkey

Пишем наш тест и «мокаем» метод http.get:

Read more

Marketplace. Скрипт учета депозитов

Marketplace. Скрипт учета депозитов

Скрипт: Скрипт учета криптодепозитов.

Скрипт позволяет проводить приём, учёт и начисление процентов на различные депозиты в разных валютах.

Текущие поддерживаемые валюты:

  1. Webmoney WMZ,WME,WMR,WMU,WMG,WMX — с ограничениями
  2. Яндекс.Деньги — с ограничениями
  3. Qiwi
  4. Perfect Money
  5. Bitcoin
  6. Ethereum
  7. Litecoin
  8. Monero
  9. Ripple
  10. Bytecoin
  11. Stellar
  12. Waves token
  13. Advcash
  14. OKPAY
  15. Payeer

Поставка:

Read more