Обработка событий внешними скриптами

Основная часть программы и общие вопросы по модулям. Установка и настройка BGBillingServer, BGBillingClient.

Обработка событий внешними скриптами

Сообщение ok-2004 » 01 мар 2019, 18:17

Добрый день!
Наткнулся в https://bgbilling.ru/v7.2/download/kernel/fixed :

$this->bbcode_second_pass_code('', '
....
960 26.02.2019 13:14:28 ДОБАВЛЕНО Kernel: Обработка событий внешними скриптами (Php, Perl, Bash и т.д.)
.....
')

Если Вас не затруднит, вкратце, крупными мазками - как сиим чудом пользоваться ? :o
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)
ok-2004
Клиент
 
Сообщения: 599
Зарегистрирован: 21 май 2008, 10:54
Откуда: 50-й рег.

Re: Обработка событий внешними скриптами

Сообщение Phricker » 01 мар 2019, 19:30

$this->bbcode_second_pass_code('', 'package ru.bitel.bgbilling.kernel.script.server.dev;

import ru.bitel.bgbilling.kernel.event.*;
import org.json.*;
import ru.bitel.common.*;
import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.reflect.*;

public abstract class EventScriptBase<E extends Event> implements EventScript<E>
{
protected PrintStream out;
protected PrintStream err;

public void setOutputStream(final PrintStream out) {
this.out = out;
}

public void setErrorStream(final PrintStream err) {
this.err = err;
}

protected void print(final Object message) {
this.out.println(message);
}

protected void error(final Object message) {
this.err.println(message);
}

protected void doExternalScript(final E event, final List<String> command) {
try {
final ProcessBuilder processBuilder = new ProcessBuilder(command);
final Process process = processBuilder.start();
final JSONObject eventJsonObject = new JSONObject((Object)event);
final OutputStream outputStream = process.getOutputStream();
outputStream.write(eventJsonObject.toString().getBytes("UTF-8"));
final ByteArrayOutputStream processOutputStream = new ByteArrayOutputStream();
Utils.flush(process.getInputStream(), processOutputStream);
final String result = new String(processOutputStream.toByteArray(), "UTF-8");
this.print("result = " + result);
if (result != null) {
for (final String line : result.split("\n")) {
if (line.startsWith("R:")) {
final String[] tokens = line.substring(2).split("\t");
for (final Method method : event.getClass().getMethods()) {
if (method.getName().equals(tokens[0]) && method.getParameterCount() == tokens.length - 1) {
int index = 1;
final List<Object> args = new ArrayList<Object>();
for (final Parameter parameter : method.getParameters()) {
final Class<?> clazz = parameter.getType();
if (clazz.equals(String.class)) {
args.add(String.valueOf(tokens[index]));
}
else if (clazz.equals(Integer.TYPE)) {
args.add(Integer.parseInt(tokens[index]));
}
else if (clazz.equals(BigDecimal.class)) {
args.add(new BigDecimal(tokens[index]));
}
++index;
}
method.invoke(event, args.toArray());
break;
}
}
}
}
}
}
catch (Exception ex) {
ex.printStackTrace(this.err);
}
}
}
')
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn
Аватара пользователя
Phricker
Клиент
 
Сообщения: 5775
Зарегистрирован: 29 мар 2010, 23:11

Re: Обработка событий внешними скриптами

Сообщение Phricker » 01 мар 2019, 19:31

$this->bbcode_second_pass_code('', 'public class TestCreateContract
extends EventScriptBase<ContractCreatedEvent> {

@Override
public void onEvent(ContractCreatedEvent event, Setup setup, ConnectionSet connectionSet)
throws Exception {
List<String> commands = new ArrayList<>();
commands.add("/opt/ping.sh");
this.doExternalScript(event, commands);
}
}
')

$this->bbcode_second_pass_code('', '# cat ./ping.sh
#!/bin/sh

touch /opt/event.txt
')


Изображение
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn
Аватара пользователя
Phricker
Клиент
 
Сообщения: 5775
Зарегистрирован: 29 мар 2010, 23:11

Re: Обработка событий внешними скриптами

Сообщение Phricker » 01 мар 2019, 19:48

Отсюда

$this->bbcode_second_pass_quote('', 'A')lexander Yakunin, [01.03.19 16:42]
Эм.
Я так в пустоту спрошу
$this->bbcode_second_pass_code('', 'protected void doExternalScript(E event, List<String> command) {
....
String result = new String(processOutputStream.toByteArray(), "UTF-8");
this.print("result = " + result);
if (result != null) {blablablabla')

Alexander Yakunin, [01.03.19 16:42]
Почему бы result не возвращать в методе. А мы с ним сами разберемся?

Alexander Yakunin, [01.03.19 16:43]
Или не было в ТЗ по доработке? )

Кирилл Сергеев, [01.03.19 16:43]
Скрипт может вызвать методы события

Alexander Yakunin, [01.03.19 16:45]
угу понял
Если в результе есть
$this->bbcode_second_pass_code('', 'if (line.startsWith("R:")) {')
то следующая за ним строка вызывает метод с таким же именем из этого класса?

Кирилл Сергеев, [01.03.19 16:45]
Да

Кирилл Сергеев, [01.03.19 16:46]
Возврат строки добавлю

Кирилл Сергеев, [01.03.19 16:47]
В принципе это больше рассчитано на тех кто не знает яву и хочет обрабатывать события внешними скриптами, а им возврат не сильно нужен...
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn
Аватара пользователя
Phricker
Клиент
 
Сообщения: 5775
Зарегистрирован: 29 мар 2010, 23:11

Re: Обработка событий внешними скриптами

Сообщение ok-2004 » 01 мар 2019, 20:46

Большое спасибо уважаемый [b]Phricker[/b] за развёрнутый ответ.

В принципе вот здесь :
$this->bbcode_second_pass_quote('', '
')Кирилл Сергеев, [01.03.19 16:47]
В принципе это больше рассчитано на тех кто не знает яву и хочет обрабатывать события внешними скриптами, а им возврат не сильно нужен...

правильно угадывается мой нездоровый интерес к этой фиче.
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)
ok-2004
Клиент
 
Сообщения: 599
Зарегистрирован: 21 май 2008, 10:54
Откуда: 50-й рег.

Re: Обработка событий внешними скриптами

Сообщение Phricker » 02 мар 2019, 00:56

$this->bbcode_second_pass_quote('ok-2004', '')ольшое спасибо уважаемый [b]Phricker[/b] за развёрнутый ответ.

Я пока еще зелёный :) Не хотят меня вместо Димона брать, я всё же иногда работаю :D

В документацию, кстати, добавили.
https://docs.bitel.ru/pages/viewpage.ac ... =174882826
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn
Аватара пользователя
Phricker
Клиент
 
Сообщения: 5775
Зарегистрирован: 29 мар 2010, 23:11
Вернуться к началу

Re: Обработка событий внешними скриптами

Сообщение ok-2004 » 02 мар 2019, 11:43

Для меня Вы всегда будете красным не смотря ни на какие правила и каноны.
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)
ok-2004
Клиент
 
Сообщения: 599
Зарегистрирован: 21 май 2008, 10:54
Откуда: 50-й рег.


Вернуться в Ядро системы

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1

cron