主操作流程
配置状态监控
PID信息维护完成后,刷新首页配置监控,查看配置连接状态,如连接状态显示连接失败,则在悬停处可看到失败原因。
预警邮箱配置
【设置-->系统参数设置】中维护接收预警提醒的邮箱。
用户操作日志
【运行监控-用户日志】中可查看所有放大工号在任何终端近三个月的操作日志。
流量监控
【运行监控-流量监控】中可查看配置或放大工号的流量数据。
消息推送
通过二次开发,可以把基于YIX-PID-SHARE进行的指定操作结果及信息同步到第三方系统。
授权信息中查看eTerm登录设置信息
1.选择一个在运行中的端口。 2.选择实时用户数少的端口。 3.eTerm客户端软件如果是3.990版本以下,请选择非安全传输端口。
3.1 接口分类
- 管理功能接口:管理放大工号信息。
- 业务功能接口:执行与eTerm指令相关的业务功能。
3.2 接口文档
- 联系管理员获取
3.3 接口协议
- 接口基于http协议进行开发,传输的编码格式UTF-8。
3.4 接口请求参数说明
- 3.4.1请求的业务参数需以json格式使用RequestPayload方式提交,将Content-Type类型设置为application/json,具体的业务参数节点说明参见接口文档
- 3.4.2公共请求入参需放在header中传入,说明如下:
参数 数据类型 描述 备注 compCode string 公司代码 必传。在管理后台授权信息中可查看获取。 apiSign string api签名 必传。md5(公司代码 + & + 接口秘钥),接口秘钥在管理后台授权信息中可查看获取。 timestamp string 时间戳 必传。精确到毫秒。 reqType string 请求类型 必传。固定为3。 reqId string 请求ID 必传。32位,用于日志跟踪。 userNo string 放大工号 业务类接口必传。 userSign string 放大工号签名 业务类接口必传。md5(放大工号 + & + 放大工号密码),放大工号密码在工号信息维护中自行设置。
3.5 接口响应参数说明
3.5.1响应返回为JSON字符串,格式如下
参数 数据类型 描述 备注 errCode string 错误代码 业务错误代码,1表示成功,其他值的含义参见具体业务接口文档 errMsg string 错误说明 业务处理失败时,异常信息,用于开发阶段快速定位问题,不能当做业务逻辑字段使用。 tips string 提示说明 业务处理失败时,失败提示信息。 timestamp Long 时间戳 当前时间戳。 env string 环境标识 test:测试环境,prod:生产线上环境。 requuid string 请求唯一标识 32位,如果接口请求时传入,会以请求传入的为准。可以将此标识提供给技术人员,方便快速定位错误日志 data JSON对象 数据对象 业务数据对象,具体的节点说明参见接口文档。
- 3.5.2失败示例
{
"errCode": "9996",
"errMsg": "分组下无可用的PID,请稍后再试或联系管理员",
"tips": "分组下无可用的PID,请稍后再试或联系管理员",
"timestamp": "1626945392925",
"requuid": "98817e17-ac7f-46e4-88ec-d710772d6c81",
"env": "test"
}
- 3.5.3成功示例
xxxxxxxxxx
{
"data": {
"resultStr": "23JUL(FRI) CANWUH ..."
},
"errCode": "1",
"errMsg": "success",
"tips": "success",
"timestamp": "1626945716207",
"requuid": "b73b9da9-9e52-4edf-9291-0987704d69df",
"env": "test"
}
3.6 错误状态码
3.7 JAVA调用示例
xxxxxxxxxx
package cn.com.httpclient.etermClient;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import java.io.Closeable;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* Copyright (C), 2018-2020
* FileName: ClientDemo
* Author: shenjx
* Date: 2020/10/26 8:43
* Description:YIX-PID-SHARE JAVA调用示例 不依赖三方
*/
public class ClientDemo {
//接口域名地址 管理员提供
static final String host = "http://xxx.xxx.xxx";
//公司代号 登录YIX-PID-SHARE管理后台,查看授权信息
static String compCode = "LDKJ";
//接口秘钥 登录YIX-PID-SHARE管理后台,查看授权信息
static String secretKey = "3f42647cbce010961cbb03582424d808";
enum MethodPath {
etermCmd("/eterm/openapi/eterm/etermCmd"),//原始黑屏指令请求接口
patEx("/eterm/openapi/eterm/patEx"),//按航段PAT接口
//TODO 全部接口列表参见swagger
;
private String path;
MethodPath(String path) {
this.path = path;
}
}
public static void main(String[] args) {
//用户工号 YIX-PID-SHARE管理后台-工号管理-工号信息中维护
String userNo = "shenjianxin";
//用户密码 YIX-PID-SHARE管理后台-工号管理-工号信息中维护
String userPwd = "********";
//接口地址
String url = host + MethodPath.etermCmd.path;
//请求头
Map<String, String> header = getHeader(userNo, userPwd);
//原始黑屏接口指令
String cmd = "AVH CANWUH+";
String jsonStr = "{\"zl\":\"" + cmd + "\",\"ztFlag\": \"1\"}";
try {
System.out.println("请求指令:" + jsonStr);
String res = HttpUtil.jsonPost(url, header, jsonStr);
System.out.println("返回内容:" + res);
} catch (Exception e) {
e.printStackTrace();
}
}
private static Map<String, String> getHeader(String userNo, String userPwd) {
Map<String, String> hearders = new HashMap<>();
//请求来源方式,固定3
hearders.put("reqType", "3");
//用于操作日志查询的唯一标识
hearders.put("reqId", UUID.randomUUID().toString());
//时间戳
hearders.put("timestamp", String.valueOf(System.currentTimeMillis()));
//公司代号
hearders.put("compCode", compCode);
//用户工号
hearders.put("userNo", userNo);
//用户签名 Md5Encrypt.md5(用户工号 + "&" + 用户密码)
hearders.put("userSign", Md5Encrypt.md5(userNo + "&" + userPwd));
//接口秘钥签名
hearders.put("apiSign", Md5Encrypt.md5(compCode + "&" + secretKey));
return hearders;
}
static class HttpUtil {
/**
* 传输编码格式
*/
public static final String charset = "UTF-8";
/**
* 请求返回超时时间 毫秒
*/
public static final int socketTimeout = 30000;
/**
* 请求建立连接时间 毫秒
*/
public static final int connectTimeout = 2000;
/**
* @param url 接口地址
* @param hearders 公共参数
* @param jsonStr 请求数据对象
* @return
* @throws Exception
*/
public static String jsonPost(String url, Map<String, String> hearders, String jsonStr) throws Exception {
CloseableHttpClient httpclient = null;
CloseableHttpResponse response = null;
try {
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("Accept-Encoding", "gzip, deflate");
httpPost.addHeader("Content-Type", "application/json");
httpPost.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
if (hearders != null) {
for (Map.Entry<String, String> map : hearders.entrySet()) {
httpPost.addHeader(map.getKey(), map.getValue());
}
}
StringEntity se = new StringEntity(jsonStr, charset);
se.setContentEncoding(charset);
httpPost.setEntity(se);
HttpClientBuilder create = HttpClientBuilder.create();
create.setDefaultRequestConfig(RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build());
httpclient = create.build();
response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();
if (entity != null) {
return EntityUtils.toString(entity, charset);
}
} catch (Exception e) {
throw e;
} finally {
closeAll(response, httpclient);
}
return null;
}
public static void closeAll(Closeable... clo) {
if (clo != null && clo.length > 0) {
for (Closeable c : clo) {
IOUtils.closeQuietly(c);
}
}
}
}
static class Md5Encrypt {
private static final char[] DIGITS = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public static String md5(String text) {
return md5(text, "utf-8");
}
public static String md5(String text, String encoding) {
MessageDigest msgDigest = null;
try {
msgDigest = MessageDigest.getInstance("MD5");
msgDigest.update(text.getBytes(encoding));
byte[] bytes = msgDigest.digest();
return new String(encodeHex(bytes));
} catch (UnsupportedEncodingException | NoSuchAlgorithmException var4) {
return null;
}
}
public static char[] encodeHex(byte[] data) {
int l = data.length;
char[] out = new char[l << 1];
int i = 0;
for (int var4 = 0; i < l; ++i) {
out[var4++] = DIGITS[(240 & data[i]) >>> 4];
out[var4++] = DIGITS[15 & data[i]];
}
return out;
}
}
}