LINUX.ORG.RU

Сообщения gadzira

 

Спецификация трафика за сутки

Всем привет!

Хочу оценить куда больше всего ходит сервер, скажем 10 ресурсов которые больше всего потребляют трафик.

Чем это удобнее всего сделать?

 ,

gadzira
()

Sed/awk: add substring to output

Всем привет! Выполняю df --output=avail "$@" | sed '1d;s/[^0-9]//g'

Получаю заветные цифры, но мне нужно немного модифицировать вывод, а именно:

avail_space{directory="/tmp"} 417910

Кто-то еще владеет древним искусством sed и awk?

 ,

gadzira
()

JSON schema: regular expression

Всем привет!

Есть такой вот json:

 
 "Resources": {
    "APP": {
      "Properties": {
        "OS": "centos-6-x86_64",
        "VCPUs": 3,
        "Memory_MB": 4096
      }
    },
    "DB": {
      "Properties": {
        "OS": "centos-6-x86_64",
        "VCPUs": 3,
        "Memory_MB": 4096
      }
    }
  },

Хочу валидировать его используя схему, а копипастить описание каждого ресурса не хочу. Можно ли использовать в схеме regex'ы?

 

gadzira
()

Groovy: read json?

Всем привет!

Хочу проверять в json'ах количество VCPU. Вот пример json'а:

"Resources": {
    "VM1": {   
      "Properties": {
        "VCPUs": 4, 
        "Memory_MB": 6144
      }
    }, 
    "VM2": {
      "Properties": {
        "VCPUs": 2, 
        "Memory_MB": 2048
      }
    }
}

В чем проблема, в pipeline, что бы прочитать json кошерно использовать readJson, а он получает доступ к значению по ключу, т.е. если бы "Name" : "VM1"{, то и проблемы бы не было: println data.Resources.Name.VCPUs

НО json я не могу модифицировать (да и не хочу). Собственно вопрос, как закостылить какой workaround тут можно использовать?

 , , ,

gadzira
()

Regex: multipattern

Всем привет!

Нужна помощь в составлении грамотного regex'a.

Есть вот такие версии у артефактов:

  • 7.4.0-187
  • 7.5.1-113
  • 7.5-11test
  • 1.1.2
  • 2.2

Первые 3 вида я успешно обрабатываю такой регуляркой: def regex = /(\d.+)(-\d+(?![\w*]))/, те мне нужны версии с цифрами после тире, а если есть версии где буквы фигурируют в названии - то эти версии не нужно. Однако теперь нужно обрабатывать еще и версии артефактов вообще без тире. И как это сделать я хз. Может быть нужно добавить 2 regex'а или как-то модернизировать существующий.

Буду рад любой помощи!

 ,

gadzira
()

Groovy: sort version string

Всем привет! Как в groovy можно сортировать строки версий, например:

  • 2.0.1
  • 2.0.10
  • 2.0.11
  • 2.0.12
  • 2.0.13
  • 2.0.14
  • 2.0.15
  • 2.0.16
  • 2.0.17
  • 2.0.18
  • 2.0.19
  • 2.0.2
  • 2.0.20
  • 2.0.21
  • 2.0.22
  • 2.0.23
  • 2.0.24
  • 2.0.25
  • 2.0.26
  • 2.0.27
  • 2.0.28
  • 2.0.29
  • 2.0.3

 

gadzira
()

Годной SF нить

Всем привет! Посоветуйте книжек с годной сай-фай, вроде первых чужих (знаю что это фильм, я про сюжет) или Ложной слепоты. Заранее спасибо!

Итого получилось:

  • «Спин» Роберт Чарльз Уилсон
  • «Червь» Джон МакКрэй
  • «Звёздный молот», «Боевая форма», «Мастер боя» Кристофера Раули
  • Лоренс ван Котт
  • Крис Невилл
  • «Пламя над бездной», «Глубина в небе» Вернор Виндж
  • «Диаспора» Грег Иган
  • «Задача трёх тел» Лю Цысинь
  • Пандорум
  • «Наследство», «Наследие» Уильям Кейт
  • «Схизматрица» Брюс Стерлинг
  • «Мировая Война Z/Война Миров Z» Макс Брукс
  • «Анафем» Нил Стивенсон

Всем спасибо!

 

gadzira
()

Groovy: .each?

Всем привет!

Вопрос прозвучит странно, но все же:

Есть ли в groovy какой-то аналог .each, но с возможностью указать рейндж?

 ,

gadzira
()

Groovy: сохранить в новом списке элементы другого списка

Всем привет!

Что-то ни как не могу придумать внятного решения для такой задачи: есть два списка

def list1 = ["/dir/elem1","/dir/elem2","/dir/elem3","/dir/elem4","/dir/elem5","/dir/elem6",];
def list2 = ["elem1","elem6",];

Хочу из list1 удалить все элементы, кроме тех что есть в list2, что бы в итоге получилось:

def list3 = ["/dir/elem3","/dir/elem4","/dir/elem5","/dir/elem6",];

Делаю я это так:

list2.each {
    for (i in list1) { if (!i.contains(it)) { list2 << i}}
}

Проблема в том, что итоговый список содержит все элементы:

["/dir/elem2","/dir/elem3","/dir/elem4","/dir/elem5","/dir/elem6","/dir/elem1","/dir/elem2","/dir/elem3","/dir/elem4","/dir/elem5"]

 

gadzira
()

Groovy: contains()

Всем привет!

Кто-то может объяснить как работает contains()?

Есть список строк:

def list = ["path=repo/dir/1.2.3-1278", "path=path=repo/dir/1.2.3-1279","path=repo/dir/3.3.3-1281"

Я хочу получать только то, что содержит 3.3.3 и пишу такую функцию:

def String[] getVersionList(String[] list){
    def versionList = [];
    list.each{
        if (it.contains('3.3.3')){
            versionList << it
        }
    return versionList
    }
}

Однако, versionList содержит в себе вообще все строки из исходного листа.

Если тут нужно использовать что-то другое, то что?

 

gadzira
()

DevOps/SRE engineer

Мопед не мой!

В московский офис компании Ingram Micro Cloud требуется DevOps-инженер для построения и управления delivery-процессами в геораспределенных R&D командах.

Бюрократическое описание на hh

Мы ожидаем от кандидата:

  • отсутствие боязни к траблшутингу, базовые скиллы использования утилит типа tcpdump, strace, gdb;
  • опыт работы с виртуализацией (Virtuozzo, KVM), контейнерами и системами их оркестрации (Docker, K8S/Swarm) и публичными облаками (любыми на выбор - Azure/AWS/GCP);
  • умение писать человекочитаемый код (мы любим автоматизацию, и она у нас написана на Python);
  • настойчивое желание проводить все изменения в инфраструктуре через configuration management (и понимание того, почему это важно);
  • свободный письменный (желательно еще и разговорный) английский язык - компания международная, вся почтовая переписка - только на английском.

С чем придется работать (список кейвордов): RHEL/CentOS Jenkins, OpenStack, Virtuozzo/OpenVZ, Ansible, Terraform, Azure, AWS, GCP, Zabbix

С нас:

  • полностью белая зп, 150к net и выше - зависит от ваших скиллов;
  • новый и стильный офис на м. Белорусская;
  • фрукты, йогурты и прочие ништяки в офисе, компенсация обедов, парковка, ДМС (и скидки на него для членов семьи), оплачиваемые поездки на профильные конференции;
  • оплачиваемые больничные (до 10 дней в году);
  • ну и, конечно же, интересные и сложные задачи )

Резюме и вопросы можно направлять в телеграм @en_austin или в почту vgrevtsev@odin.com

P.S: Удаленки нет и не рассматривается, совсем никак, даже если очень хочется, увы.[/]

 , ,

gadzira
()

Groovy: create list with iterator value name

Всем привет! Собственно сабж: хочется странного, а именно создавать списки с именем текущего значения итератора. Вот как я это себе мыслил:

def majorList = ["3.7.0","3.8.0","3.9.0",];
def minorList = ["3.7.0-1","3.7.0-2","3.7.0-3","3.8.0-1","3.8.0-2", "3.8.0-3", "3.9.0-1","3.9.0-2","3.9.0-3",]
for (i in majorList){
    def i = []
    for (j in (minorList){
        if (j.contains(i)){
            println(j)
            i.add(j)
        }
    }
    print i
}

 

gadzira
()

Go: ioutil.ReadAll()

Всем привет! Есть какая-то адекватная замена ioutil.ReadAll(), которая позволит увеличь производительность?

Вангую что можно, наверное, писать в какой-то буфер маленькими кусочками, но хотелось бы услышать чужой опыт.

 ,

gadzira
()

golang, psql, pgbouncer

Всем привет!

Есть код который запрашивает из базы строку.

err := db.QueryRow(`SELECT data FROM table WHERE key=$1;`, sessionKey).Scan(&sessionDataString)
if err != nil && err == sql.ErrNoRows {
    fmt.Errorf("get user ID error: %v", err)
    return
}

Часто все работает корректно, но есть довольно странное для меня поведение: аргумент запроса меняется, а ответ нет. Есть подозрение что я не умею работать с pgbouncer, но каких-то ограничений или рекомендаций не нашел. Кто-то с подобным сталкивался?

 ,

gadzira
()

Golang: base64 to .png

Всем привет!

Как можно перегнать base64 в .png или .jpg используя чудный язык golang? Меня даже больше интересует какую библиотеку для этого нужно использовать?

 ,

gadzira
()

Выгрузить картинки из базы

Всем привет!

Есть задача выгрузить из базы картинки, использовать для этого нужно golang в котором я шарю чуть мене чем никак.

Моих потуг хватило на такое:

db.Exec("COPY pic FROM photo TO '$1';", PATH_TO_STORE + (strings.TrimSpace(resultString)))
Однако ж ничего не происходит! Кто-то может подсказать как добиться необходимого?

 ,

gadzira
()

TypeError: object of type 'filter' has no len()

Всем привет!

Есть такой код из туториала про веб-сервис:

#!flask/bin/python
from flask import Flask, jsonify
from flask import abort

app = Flask(__name__)

tasks = [
    {
        'id': 1,
        'title': u'Buy groceries',
        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',
        'done': False
    },
    {
        'id': 2,
        'title': u'Learn Python',
        'description': u'Need to find a good Python tutorial on the web',
        'done': False
    }
]

@app.route('/')
def index():
   return "200 OK"

@app.route('/todo/api/v1.0/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = filter(lambda t: t['id'] == task_id, tasks)
    if len(task) == 0:
        abort(404)
    return jsonify({'task': task[0]})

if __name__ == '__main__':
    app.run(debug=True)

Проблема в том, что когда вызываешь /todo/api/v1.0/tasks/2 все валится с ошибкой: TypeError: object of type 'filter' has no len() В чем тут проблема никак не могу понять.

 ,

gadzira
()

Groovy нужен?

Всем привет!

А может кто-то поделиться личным наблюдением, собственно нужен ли groovy где-то за рамками dsl и gradle? Или ну его в пень, есть java-бояре, которые еще долго будут править миром разработки?

Ну и что бы два раза не вставать, как можно его эффективно прокачать (inb4 писать на нем)

 ,

gadzira
()

Logrotate

Всем привет!

А logrotate умеет в регулярные выражения? Если да, то какие?

Потому как /dir/[dir1,dir2]/file.log не хочет работать.

 

gadzira
()

Gitlab: огромный pack файл

Всем привет!

Как можно быстро без регистрации и смс уменьшить pack файл в репозитории? Сейчас из того что нагуглил вижу такое решение: отобрать с первого коммита по недавний (скажем 3 месяца назад) и сделать git rebase -i -f --autosquash. Но это придется проделать для каждой ветки и в каждом репозитории.

Может кто-то уже решал похожие проблемы?

 

gadzira
()

RSS подписка на новые темы