MX HTTP Proxy
Приложение запускается как сервис и позволяет выполнять через REST API команды на удаленном сервере Zultys MX. Для отслеживания событий сервера Zultys MX используется Server-Sent Events API.
Описание API
Сервер включает в себя описание поддерживаемого API в виде документа в формате OpenAPI 3.0 (HTML view). Так же поддерживается визуальное представление данного документа при обращении к корню сервиса.
Пример использования API
POST /login HTTP/1.1
Host: localhost:8000
Content-Type: application/json; charset=utf-8
Content-Length: 144
{
"login":"login",
"password":"password",
"type":"User",
"platform":"iPhone",
"version":"7.0",
"loginCapab":"Audio",
"mediaCapab":"Voicemail|CallRec"
}
HTTP/1.1 200 OK
Server: MX-HTTP-Proxy/0.1.3 (2ce6c32)
X-API-Version: 1.0.2
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 180
{
"token": "81snQUFPMDs7GEye",
"user": "43892780322813134",
"device": "273",
"softPhonePwd": "nfsi8ohraw2ReJtjCuE7f3KyTWc2doUi",
"api": 11,
"mx": "631HC"
}
Параметры запуска сервера
Все настройки сервиса осуществляются через параметры для запуска.
-port <port>
Задает имя хоста (опционально) и порт, на котором будет отвечать HTTP-сервер.
Так же может быть задано через переменную окружения PORT
.
-mx <mxhost>
Задает адрес сервера Zultys MX. Если порт не указан, то по умолчанию используется порт 7778
.
Так же может быть задано через переменную окружения MX
:
$ export MX=mxhost.connector73.net
Внимание: незащищенное соединение с сервером Zultys MX не поддерживается!
-log <params>
Задает настройки для вывода лога работы сервиса.
Для вывода лога используется stderr
. Если необходимо переопределить вывод лога в файл, то можно воспользоваться следующим методом:
$ ./mx-http-proxy 2>mx-http-proxy.log
Вы можете задать уровень сообщений для вывода в лог:
all
- выводить все записи логаtrace
- выводить все записи лога, начиная от команд и событий от сервера MXdebug
- выводить все записи лога, начиная с отладочных выводов, но исключая вывод команд и событий сервера MXinfo
- выводить все записи лога, начиная от информационных, но исключая отладочные данныеwarn
- не выводить информационных сообщений лога, а только об ошибках и предупрежденияхerror
- выводить только сообщения об ошибкахnone
- вообще отключить вывод лога
Так же можно задать формат вывода лога:
json
- использовать формат JSON для вывода логаconsole
- использовать консольный формат для вывода логаcolor
- использовать консольный формат с цветовым выделением для вывода логаdevelop
- аналогичен формату color
, но значения атрибутов лога выводит с новой строки
По умолчанию используется консольный формат и выводятся все информационные сообщения, предупреждения, а так же сообщения об ошибках. Отладочные сообщения и команды с событиями сервера MX в лог не выводятся, если это явно не задано.
Можно задать сразу несколько значений параметра лога, указав их через запятую или двоеточие:
./mx-http-proxy -log dev,all
Настройки лога по умолчанию можно изменить для всех приложений, задав их в виде переменной окружения LOG
:
$ export LOG=COLOR
Или только для однократного запуска приложения:
$ LOG=DEV ./mx-http-proxy -mx localhost
Вывод лога в формате JSON позволяет легче разбирать его программным образом:
$ ./mx-http-proxy -log json,all
{"ts":1533494002,"lvl":0,"msg":"service","name":"MX-HTTP-Proxy","version":"dev"}
{"ts":1533494002,"lvl":0,"log":"http","msg":"server","listen":"localhost:8000","tls":false,"url":"http://localhost:8000/"}
Сообщения, относящиеся к командам сервера MX используют тип лога - mx
, а для информации об обработке HTTP-запросов используется - http
. Все остальные выводы обычно не используют префикс:
21:52:50.512539 INFO service name=MX-HTTP-Proxy version=dev date=2018-08-05 build=063525b
21:52:50.512949 INFO [http]: server listen=localhost:8000 tls=false url=http://localhost:8000/
21:53:00.036338 TRACE [mx]: dmtest3: <- 0001 <loginRequest type="User" platform="iPhone" version="7.0" loginCapab="Audio" mediaCapab="Voicemail|CallRec"><userName>dmtest3</userName><pwd>nnke/C/yi/f...U5OVTqg5joXHc=
</pwd></loginRequest>
21:53:00.070054 TRACE [mx]: dmtest3: -> 0001 <loginResponce Code="0" sn="631HC" apiversion="11" ext="273" userId="43892780322813134" softPhonePwd="yTEuJ15RheF2...BogZXzp27fAqc334X" proto="TLS" mxport="5061" clientport="1234" >Login OK</loginResponce>
21:53:00.070779 DEBUG store connection login=dmtest3 token=m_r3PY2i1jkxNo6W
21:53:00.071176 INFO [http]: POST /login code=200 user=dmtest3 size=180 duration=144.83142ms gzip=false
21:53:01.821825 TRACE [mx]: dmtest3: <presence from="0" status="Available" mxStatus=""></presence>
21:53:01.822540 DEBUG sse user=dmtest3 event=presence data={"presence":"Available"}
Поддержка Docker
Данный сервис доступен в виде образов Docker:
$ docker pull mdigger/mx-http-proxy
$ docker run --rm \
-p 8000:8000 \
-e MX=631hc.connector73.net \
mdigger/mx-http-proxy -log all,color
Мониторинг
По адресу /debug/vars
доступны описания некоторых метрик сервиса в формате JSON, которые могут быть использованы для мониторинга.