Latest Posts

Получение данных Jira тикета по Atlassian API

Получение данных Jira тикета по Atlassian API

Для получения данных по Jira тикету достаточно воспользоваться Atlassian REST API 

curl -D- \
   -X GET \
   -H "Authorization: Basic <base64 encoded stuff>“ \
   -H "Content-Type: application/json" \
   "https://yourcompany.atlassian.net/rest/api/2/issue/TICKET-NUMBER"

В качестве токена авторизации можно (но не рекомендуется) воспользоваться base64 представлением вашего пароля:

echo -n '[email protected]:your-password' | openssl base64

 

Read more

Шаблон Golang table testing

Шаблон Golang table testing

Допустим у нас имеется некая функция:

NormalizeEndpoint(endpointBefore string) string

Подготовим тесты на эту функцию:

func TestNormalizeEndpoints(t *testing.T) {
	type runnerTest struct {
		name           string
		endpointBefore string
		endpointAfter  string
	}

	var tests = []runnerTest{
		{"Test 1", "https://case1.com", "case1"},
                {"Test 2", "https://case2.com", "case2"},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			assert.Equal(t, tt.endpointAfter, NormalizeEndpoint(tt.endpointBefore))
		})
	}
}

При помощи нехитрой конструкции можно написать неплохие table тесты, которые легко обновлять и добавлять новые кейсы.

Read more

Golang &#8212; Squirrel SQL Query Generator

Golang — Squirrel SQL Query Generator

Пример удобной библиотеки для генерации SQL кода в Golang. Нет необходимости писать большие и сложные sprintf и делать экранирование вручную. Просто воспользуемся удобными синтаксисом библиотеки squirrel.

Для начала:

import "github.com/Masterminds/squirrel"

Теперь допустим нам нужно добавить новую запись в нашу postgres табличку.

Для начала важно указать корректный placholder формат, без этого Postgres будет выдавать ошибку на сгенерированный SQL:

Read more

Скрипт корректировки курсов Bestchange

Скрипт корректировки курсов Bestchange

Разработан и выведен в отдельно существующий компонент специальный скрипт для автокорректировки курсов для агрегатора bestchange. Данный продукт просто необходим для обменных пунктов, которые работают через bestchange.ru и которые хотят быть постоянно в топе по определенным направлениям.

Какие параметры можно регулировать?

  1. Установка минимального-максимального курса.
  2. Использование коррекции при установке курса +/-.
  3. Установка курса в зависимости от резервов конкурента.
  4. Задание интервал обновления курсов.
  5. Установка «рабочих часов» для корректировки.

Данный модуль может поставляться как компонент внутри обменного пункта через специальное внутреннее API либо как отдельно стоящий сервис в вашей сети либо через облачное решение. Для внедрения в действующий обменный пункт достаточно настроить сам модуль и добавить специальный адрес для получения сигналов от модуля.

Read more

Получить реальный IP адрес клиента с Cloudflare в PHP

Получить реальный IP адрес клиента с Cloudflare в PHP

При использовании сервиса Cloudflare стоит вопрос получения реального IP адреса клиента. Специально для этого Cloudflare отдает заголовок HTTP_CF_CONNECTING_IP.

Нам достаточно его забрать в любом виде (через библиотеку желательно, а не через суперглобальную переменную т.к суперглобальные переменные в PHP это всегда зло):

$ipAddress = $_SERVER['HTTP_CF_CONNECTING_IP'];
echo $ipAddress;

 

Read more

PHP скрипт загрузки папки с файлами на S3 bucket

PHP скрипт загрузки папки с файлами на S3 bucket

Очень простой и эффективный метод отправить все необходимые файлы с выбранной папки на ваш S3.

Устанавливаем aws-sdk-php:

composer require "aws/aws-sdk-php"

Готовим скрипт:

#!/usr/bin/env php
<?php

use Aws\S3\S3Client;

require __DIR__.'/vendor/autoload.php';

if ($_SERVER['argc']<2){
    print 'Expected dir as parameter: run.php /dir/to/sync'.PHP_EOL;
    exit(1);
}

$dir = $_SERVER['argv'][1];

$s3Client = new S3Client([
    'version' => 'latest',
    'region' => '',
    'endpoint' => '',
    'credentials' => [
        'key' => '',
        'secret' => '',
    ],
]);

$s3Client->uploadDirectory($dir,'bucket/folder');

Очень просто запускаем:

Read more

Production ready Dockerfile для Go приложения

Production ready Dockerfile для Go приложения

Ничего лишнего, только пример хорошего Dockerfile для Go приложения при помощи multi-stage build:

FROM golang:1-alpine AS builder

RUN mkdir /app
WORKDIR /app

# be sure that you have .dockerignore in your directory
COPY . ./

# maybe you don't need it? depends on what you have on your Makefile:
RUN apk add --update bash make git
RUN make

# ---

FROM alpine
COPY --from=builder /reporter/out/mobproxy-report /

RUN apk add --no-cache ca-certificates
ENTRYPOINT ["/app"]

# keep it if needed:
CMD ["/app", "version"]

В следующем сниппете покажу пример Makefile для production ready Golang приложения.

Read more

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