Latest Posts

Поднятие прокси-сервера Squid при помощи Docker за 3 минуты

Поднятие прокси-сервера Squid при помощи Docker за 3 минуты

Squid — это мощный кеширующий прокси-сервер для протоколов HTTP, HTTPS и FTP. Он помогает ускорить доступ к веб-ресурсам, снижает нагрузку на канал и может использоваться для фильтрации трафика.

В этой статье мы развернём Squid в Docker-контейнере и настроим его работу.


Шаг 1: Создание конфигурационного файла

Создадим файл squid.conf с базовыми настройками:

Read more

Скрипт парсинга курсов Bestchange

Скрипт парсинга курсов Bestchange

Скрипт проводит выборку курсов по заданным входным параметрам и может выдавать готовую json структуру по заданным направлениям. Выборка курсов производится через публичный API и содержит в себе всю необходимую информацию по лучшим курсам и параметрам обменных пунктов:

  • Минимальная цена заявки
  • Максимальная цена заявки
  • Курс
  • Резервы
  • Отзывы (Положительные — Отрицательные)
  • Название обменного пункта

Пример работы скрипта:

Read more

Golang — использование envconfig для environment variables

Golang — использование envconfig для environment variables

Для работы с переменными окружения в Golang без использования библиотеки envconfig просто не обойтись:

//AppConfig struct to manage configuration env vars
type AppConfig struct {
	DBHost       string `envconfig:"DB_HOST" required:"true"`
	DBPort       int    `envconfig:"DB_PORT" required:"true"`
	DBUser       string `envconfig:"DB_USER" required:"true"`
	DBName       string `envconfig:"DB_NAME" required:"true"`
	DBPassword   string `envconfig:"DB_PASSWORD" required:"true"`
}

...

// and let's use it in our main func:
var cfg AppConfig
err := envconfig.Process("myApp", &cfg)
if err != nil {
	return nil, err
}

// finally, let's use our app configuration
fmt.Println(cfg.DBHost)

Библиотека также поддерживает default значения, required флаги, custom декодеры и многое многое другое.

Read more

Golang sqlmock db tests — SELECT тесты

Golang sqlmock db tests — SELECT тесты

func TestFindAll(t *testing.T) {
	dbMock, mock, err := sqlmock.New()
	if err != nil {
		t.Errorf("An error '%s' was not expected when opening a stub database connection", err)
	}
	defer dbMock.Close()

	columns := []string{"id", "date", "name", "code"}

	expectedData := Data{
		Id: 1,
		Date:   time.Time{},
		Name:   "Name",
		Code:   "Code",
	}

	dbConn := sqlx.NewDb(dbMock, "")

	mock.ExpectQuery(`SELECT id,date,name,code FROM datas ORDER BY name ASC`).
		WillReturnRows(sqlmock.NewRows(columns).AddRow(expectedData.Id, expectedData.Date, expectedData.Name, expectedData.Code))

	r := NewRepository(dbConn)
	currencies, err := r.FindAll()
	assert.NoError(t, err)

	if err := mock.ExpectationsWereMet(); err != nil {
		t.Error(err)
	}

	expectedListOfDatas := []*Currency{&expectedData}
	assert.Equal(t, expectedListOfDatas, datas)
}

 

Read more

Docker — сохранить image в tar

Docker — сохранить image в tar

Для сохранения image в tar контейнер достаточно выполнить:

docker save my_image > my_image.tar

Теперь мы можем спокойно переносить docker image и далее «загружать» image:

docker load <input_path>/my_image.tar

 

Leave a Comment

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

Read more

Golang &#8212; Mock для sqlx драйвера базы данных

Golang — Mock для sqlx драйвера базы данных

Для написания юнит тестов часто требуется «мокать» часть зависимостей, одна из самых распространенных — соединение и операции с базой данных. Если нет возможности использовать внедрение зависимости и использовать интерфейсы типа ExecerContext на входе функции то в дело вступают не совсем чистые хаки в виде Monkey patching.

Read more

Полезные curl для Digital Ocean API

Полезные curl для Digital Ocean API

При автоматизации инфраструктуры под Terraform понадобилось найти id SSH ключей и типы дроплетов чтобы их было возможно использовать в конфигурации. Делюсь примерами curl запросов к Digital Ocean API (статья будет дополняться со временем).

  1. Вывод SSH id keys, привязанных к аккаунту:
    curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" "https://api.digitalocean.com/v2/account/keys" | jq
  2. Вывод всех типов дроплетов:
    curl -X GET "https://api.digitalocean.com/v2/images?per_page=999" -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" | jq

    Поскольку вывод получается слишком большим можно воспользоваться сохранением ответа в файл:

    Read more

GitHub API &#8212; пара полезных curl примеров

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

Список команд в организации:

curl GET --url 'https://api.github.com/orgs/<organization-name>/teams?access_token=<TOKEN>’

Работа с GitHub Status API, установка badge для Pull Request:

curl -d '{"state": "success","target_url": "https://example.com/build/status","description": "The build succeeded!","context": "continuous-integration/jenkins"}' -H "Content-Type: application/json" -X POST "https://api.github.com/repos/<organization-name>/<project-name>/statuses/<sha-of-the-commit>?access_token=<github-token>”

Данный сниппет может быть использован для установки badges на определенном pull request.

При возникновении новых интересных запросов данный пост будет пополняться.

Read more

Установка Kubernetes nginx controller на bare metal

Установка Kubernetes nginx controller на bare metal

Подробная инструкция как установить nginx ingress controller на чистый bare metal кластер:

https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal

Или по шагам:

  1. Устанавливаем ingress-nginx service с type NodePort:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml

    Проверим, что установка завершена успешно:

    kubectl get services -n ingress-nginx

    Видим:

    ingress-nginx   ingress-nginx NodePort 10.245.213.134 <none> 80:31462/TCP,443:30310/TCP  2s

    Поздравляем! Nginx контроллер успешно установлен, теперь можем сделать curl до машины с 31462 портом и получим ответ nginx:

    Read more

Получение данных 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