Latest Posts

Полезные команды по grep

Полезные команды по grep

Набор сниппетов для поиска, фильтрации через утилиту grep.

Рекурсивный поиск внутри директории (плюс замена пробелов)

grep -R 'project_id' . > file.txt
grep -o '"name-[a-zA-Z-]*"' file.txt | tr \" "\b" > file-total.txt

Поиск строки в директории

grep -s 'export GITHUB_TOKEN' * .*

Поиск измененных yml, yaml файлов внутри ci/

if [[ $(git status -s | grep ci | grep -E "y(a)?ml") ]]; then
   echo "CI configurations have changed"
fi

Статья будет дополняться…

Read more

GitHub Actions: отправка POST запросов с webrequest-action

GitHub Actions: отправка POST запросов с webrequest-action

name: POST example

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  send:
    name: Send POST request from GitHub Actions
    runs-on: ubuntu-latest
    steps:
      - name: Send post request
        uses: satak/[email protected]
        with:
          url: https://some-url/handle-post
          method: POST
          payload: '{"foo": "bar", ""pipeline_name": "${{ github.event.repository.name }}"}'

При помощи webrequest-action можно делать множество различных запросов (как POST так и GET) самой разной сложности. Больше примеров можно найти в README автора.

Read more

Sassoft API: Wallets API — Bitcoind, Litecoind, Rippled

Sassoft API: Wallets API — Bitcoind, Litecoind, Rippled

Описание API

Для работы с данным API требуется загрузить платежные данные через личный кабинет cloud.sassoft.ru

Данный API сервис предназначен для управления криптовалютными кошельками:

  • Bitcoin (Bitcoind)
  • Litecoin (Litecoind)
  • Ripple

Спецификация

  • POST /bitcoind/address | /litecoind/address
    • label * — label адреса

Пример запроса:

curl -X POST -H "Token: api-token" https://api.sassoft.ru/bitcoind/address -d '{"label":"my-label"}'

Пример ответа:

Read more

CLI interactive integration tests с expect и Go — часть 2

CLI interactive integration tests с expect и Go — часть 2

В прошлой части мы сделали exp файл, который бы запускал наше интерактивное консольное приложение и взаимодействовал с ним.

В этой части мы напишем Go test, который будет при помощи cmd.Exec запускать exp файл, ждать ответа и делать какие-либо assertions.

Пример простого теста, который бы запускал наш expect файл и делал проверки ниже:

Read more

CLI interactive integration tests с expect и Go — часть 1

CLI interactive integration tests с expect и Go — часть 1

Тестирование интерактивных консольных приложение получилось довольно интересной задачей.

Как пример напишем простейшие консольное приложение при помощи библиотеки survey:

package main

import (
	"fmt"

        "github.com/AlecAivazis/survey/v2"
)

// the questions to ask
var qs = []*survey.Question{
	{
		Name:      "name",
		Prompt:    &survey.Input{Message: "What is your name?"},
		Validate:  survey.Required,
		Transform: survey.Title,
	},
	{
		Name: "color",
		Prompt: &survey.Select{
			Message: "Choose a color:",
			Options: []string{"red", "blue", "green"},
			Default: "red",
		},
	},
	{
		Name:   "age",
		Prompt: &survey.Input{Message: "How old are you?"},
	},
}

func main() {
	// the answers will be written to this struct
	answers := struct {
		Name          string // survey will match the question and field names
		FavoriteColor string `survey:"color"` // or you can tag fields to match a specific name
		Age           int    // if the types don't match, survey will convert it
	}{}

	// perform the questions
	err := survey.Ask(qs, &answers)
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	fmt.Printf("%s chose %s.", answers.Name, answers.FavoriteColor)
}

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

Read more

Sassoft API: Coincallback API

Sassoft API: Coincallback API

Описание API

Данный API сервис предназначен для получения уведомлений прихода средств на различные криптоадреса:

  • Bitcoin
  • Litecoin
  • Ethereum
  • Ripple
  • Dogecoin
  • Zcash

Идея простая: вы генерируете новый адрес для приёма криптовалюты и посылаете запрос на Coincallback API для отслеживания приёма средств. Как только средства поступают на адрес, сервис делает POST запрос на ваш адрес, указанный в адресе.

Read more

Nginx — настройка load balancer

Nginx — настройка load balancer

Простейшая настройка nginx в качестве load balancer может выглядеть следующим образом. Открываем nginx.conf, добавляем секцию серверов upstream и даём ей имя (например loadbalancer). Серверы могут слушать на разных портах. Кроме того, можно одновременно использовать серверы, слушающие на TCP- и UNIX-сокетах.

В нашем случае:

...
upstream loadbalancer {
    server 172.17.0.1:5000;
    server 172.17.0.1:5001;
}
...

Далее в секции server указываем nginx что нам нужно проксировать запросы с определенных роутов на наш loadbalancer:

Read more

Curl — набор на все случаи жизни

Curl — набор на все случаи жизни

В данной статье собраны некоторые полезные сниппеты для работы с curl. Curl — это кросс-платформенная служебная программа командной строки, позволяющая взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.

Для справки: curl поддерживает не только протокол HTTP, но и десяток других — DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET и TFTP. Вообщем большой комбайн с различными интересными фичами. Я покажу лишь примеры, которые использовал сам за последнее время.

Read more

Golang: Получение stock price с Yahoo Finance

Golang: Получение stock price с Yahoo Finance

При помощи https://github.com/antchfx/htmlquery мы можем легко получать и парсить данные с веб страницы Yahoo Finance. Нас интересует именно stock price. Для этого в начале находим на странице нужный нам блок:

<div class="D(ib) Mend(20px)" data-reactid="31">
 <span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="32">63.50</span>
 <span class="Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($positiveColor)" data-reactid="33">+2.15 (+3.50%)</span>
 <div id="quote-market-notice" class="C($tertiaryColor) D(b) Fz(12px) Fw(n) Mstart(0)--mobpsm Mt(6px)--mobpsm" data-reactid="34">
   <span data-reactid="35">As of  1:25PM CET. Market open.</span>
 </div>
</div>

Окей, нужный блок найден. Из этого блока нас больше всего интересует ticker price — 63.50:

Read more

Sassoft API: Notifications API

Sassoft API: Notifications API

Описание API

Данный API сервис предназначен для отправки уведомлений через различные каналы:

  • Telegram
  • Email через Sendgrid API
  • SMTP Email

Спецификация

  • POST /notify
    • message * — сообщение для отправки (html форматирование поддерживается)
    • message_plain — сообщение для отправки без html форматирования
    • from — имя от, необходим если type=email
    • from_address — адрес от, необходим если type=email
    • title — заголовок, необходим если type=email
    • receiver * — получатель сообщения
    • type * — поддерживаемые типы: Email, Telegram, SMTP
    • token * — токен пользователя

Пример запроса:

Read more