Commit 2977dec5 authored by gaozhentao's avatar gaozhentao

预测图

parent 5a0daf71
......@@ -71,4 +71,15 @@ public class ReliabilityApi {
return manager.getToken(json);
}
/**
* 2. 可靠性信息接口:所有集群的状态
*
* @return 集群信息json字符串
*/
@PostMapping("selectChart")
public Map selectChart(@RequestBody String json) throws Exception{
return manager.selectChart(json);
}
}
package com.yingxin.prms.config;
import com.yingxin.prms.service.dao.CassandraDaoImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
/**
* Description:
* Datetime: 2020/12/7 15:05
* Author: gaozhentao
*/
@Configuration
public class InitHostChartConfig {
private final CassandraDaoImpl cassandraDao;
@Autowired
public InitHostChartConfig(CassandraDaoImpl cassandraDao) {
this.cassandraDao = cassandraDao;
}
}
package com.yingxin.prms.service.asyncTask;
import org.apache.http.impl.client.HttpClientBuilder;
import org.kairosdb.client.HttpClient;
import org.kairosdb.client.builder.MetricBuilder;
import org.kairosdb.client.builder.*;
import org.kairosdb.client.response.GetResponse;
import org.kairosdb.client.response.QueryResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.util.List;
public class BasicTask {
......@@ -14,21 +20,20 @@ public class BasicTask {
/**
* 服务运行状态添加到kairosDB数据库
* @param client
* @param ip
* @param port
* @param url
* @param dur
* @param isAlive
*/
Boolean insertToKairos(HttpClient client, String ip, int port, long dur, boolean isAlive) {
Boolean insertToKairos(HttpClient client, String url, long dur, boolean isAlive) {
boolean ss=false;
MetricBuilder builderHeartbeat = MetricBuilder.getInstance();
builderHeartbeat.addMetric("heartbeat")
.addTag("host", ip + ":" + port)
.addTag("host", url)
.addDataPoint(System.currentTimeMillis(), isAlive ? 0 : 1).addTtl(172800); //172800=48小时
MetricBuilder builderRespDur = MetricBuilder.getInstance();
builderRespDur.addMetric("respdur")
.addTag("host", ip + ":" + port)
.addTag("host", url)
.addDataPoint(System.currentTimeMillis(), dur);
try {
client.pushMetrics(builderHeartbeat);
......@@ -37,9 +42,36 @@ public class BasicTask {
}
ss=true;
} catch (IOException e) {
logger.error("error in insertToKairos.{}:{}", ip, port);
logger.error("error in insertToKairos.{}:{}",url);
logger.error(e.getMessage());
}
return ss;
}
void getKairos(HttpClient client, String ip, int port, long dur, boolean isAlive) {
// builderHeartbeat.addMetric("heartbeat")
// .addTag("host", ip + ":" + port)
// .addDataPoint(System.currentTimeMillis(), isAlive ? 0 : 1).addTtl(172800); //172800=48小时
// MetricBuilder builderRespDur = MetricBuilder.getInstance();
// builderRespDur.addMetric("respdur")
// .addTag("host", ip + ":" + port)
// .addDataPoint(System.currentTimeMillis(), dur);
// try {
// client.pushMetrics(builderHeartbeat);
// if (isAlive) {
// client.pushMetrics(builderRespDur);
// }
// ss=true;
// } catch (IOException e) {
// logger.error("error in insertToKairos.{}:{}", ip, port);
// logger.error(e.getMessage());
// }
// return ss;
}
}
......@@ -57,7 +57,7 @@ public class HttpTask extends BasicTask{
}
dur = System.currentTimeMillis() - start;
} catch (RestClientException e) {
insertToKairos(httpClient, hostInfo.getHost_ip(), hostInfo.getHost_port(), dur, false);
insertToKairos(httpClient, hostInfo.getService_path(), dur, false);
logger.info("httpTask to {}", hostInfo.getService_path());
logger.info(e.getMessage());
return;
......@@ -117,26 +117,26 @@ public class HttpTask extends BasicTask{
flag = checkStatusCode(map);
}
if (map.get("body") != null && !map.get("body").isEmpty() ) {
insertToKairos(httpClient, hostInfo.getHost_ip(), hostInfo.getHost_port(), dur, flag);
insertToKairos(httpClient, hostInfo.getService_path(), dur, flag);
logger.info("httpTask to {}|{}", hostInfo.getHost_ip(), flag);
if (flag) {
alarmHost.remove(hostInfo.getService_path());
}
return;
}
insertToKairos(httpClient, hostInfo.getHost_ip(), hostInfo.getHost_port(), dur, false);
insertToKairos(httpClient, hostInfo.getService_path(), dur, false);
}
/* 针对不同服务集群 返回结果 作不同校验 */
private boolean checkStatusCode(Map<String,String> map) {
if(map.get("status").equals("200")){
if(map.containsKey("status")&&map.get("status").equals("200")){
return true;
}
return false;
}
private boolean checkCode(Map<String,String> map) {
JSONObject jsonObject = JSONObject.fromObject( map.get("body"));
if(map.containsKey("body")){
if(map.containsKey("body")&&map.containsKey("body")){
String code = jsonObject.getString("code");
if(code.equals("0")){
return true;
......@@ -165,7 +165,7 @@ public class HttpTask extends BasicTask{
private boolean checkStatus(Map<String,String> map) {
JSONObject jsonObject = null;
if(map.containsKey("body")){
if(map.containsKey("body")&&map.containsKey("body")){
jsonObject = JSONObject.fromObject(map.get("body"));
String status = jsonObject.getString("status");
if(status.equals("true")){
......
......@@ -34,10 +34,10 @@ public class RedisTask extends BasicTask{
String status = redisClient.info();
alarmHost.remove(hostInfo.getService_path());
dur = System.currentTimeMillis() - start;
insertToKairos(httpClient, hostInfo.getHost_ip(), hostInfo.getHost_port(), dur, true);
insertToKairos(httpClient, hostInfo.getService_path(), dur, true);
} catch (Exception e) {
logger.info("error: redisTask to {}", hostInfo.getService_path());
insertToKairos(httpClient, hostInfo.getHost_ip(), hostInfo.getHost_port(), dur, false);
insertToKairos(httpClient, hostInfo.getService_path(), dur, false);
}
}
}
......@@ -52,11 +52,11 @@ public class UdpTask extends BasicTask{
dur = System.currentTimeMillis() - start;
} catch (IOException e) {
logger.debug("error: udpTask to {}", hostInfo.getService_path());
insertToKairos(httpClient, hostInfo.getHost_ip(), hostInfo.getHost_port(), dur, false);
insertToKairos(httpClient, hostInfo.getService_path(), dur, false);
return;
}
boolean isAlive = applicationReturn.length > 0;
insertToKairos(httpClient, ip, port, dur, isAlive);
insertToKairos(httpClient, ip, dur, isAlive);
if (isAlive) {
alarmHost.remove(hostInfo.getService_path());
}
......
......@@ -90,4 +90,9 @@ public class CassandraDaoImpl {
String cql = "SELECT * FROM ctid_prof.admin where username = '"+username+"';";
return template.selectOne(cql,Admin.class);
}
public Server_Host_Info findHostInfo(String clusterName, String ip, String port) {
String cql ="select * from ctid_prof.server_host_info;";
return template.selectOne(cql, Server_Host_Info.class);
}
}
package com.yingxin.prms.utils;
import net.sf.json.JSONObject;
public class CurveFittingMethod {
private double[] x;
private double[] y;
private double[] weight;
private int n;
private static double[] coefficient;
public CurveFittingMethod(double[] x, double[] y, int n) {
if (x == null || y == null || x.length < 2 || x.length != y.length
|| n < 2) {
throw new IllegalArgumentException(
"输入的数组不合法!");
}
this.x = x;
this.y = y;
this.n = n;
weight = new double[x.length];
for (int i = 0; i < x.length; i++) {
weight[i] = 1;
}
compute();
}
public double[] getCoefficient() {
return coefficient;
}
public double fit(double x) {
if (coefficient == null) {
return 0;
}
double sum = 0;
for (int i = 0; i < coefficient.length; i++) {
sum += Math.pow(x, i) * coefficient[i];
}
return sum;
}
public double solve(double y) {
return solve(y, 1.0d);
}
public double solve(double y, double startX) {
final double EPS = 0.0000001d;
if (coefficient == null) {
return 0;
}
double x1 = 0.0d;
double x2 = startX;
do {
x1 = x2;
x2 = x1 - (fit(x1) - y) / calcReciprocal(x1);
} while (Math.abs((x1 - x2)) > EPS);
return x2;
}
private double calcReciprocal(double x) {
if (coefficient == null) {
return 0;
}
double sum = 0;
for (int i = 1; i < coefficient.length; i++) {
sum += i * Math.pow(x, i - 1) * coefficient[i];
}
return sum;
}
private void compute() {
if (x == null || y == null || x.length <= 1 || x.length != y.length
|| x.length < n || n < 2) {
return;
}
double[] s = new double[(n - 1) * 2 + 1];
for (int i = 0; i < s.length; i++) {
for (int j = 0; j < x.length; j++) {
s[i] += Math.pow(x[j], i) * weight[j];
}
}
double[] b = new double[n];
for (int i = 0; i < b.length; i++) {
for (int j = 0; j < x.length; j++) {
b[i] += Math.pow(x[j], i) * y[j] * weight[j];
}
}
double[][] a = new double[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = s[i + j];
}
}
coefficient = calcLinearEquation(a, b);
}
private double[] calcLinearEquation(double[][] a, double[] b) {
if (a == null || b == null || a.length == 0 || a.length != b.length) {
return null;
}
for (double[] x : a) {
if (x == null || x.length != a.length){
return null;
}
}
int len = a.length - 1;
double[] result = new double[a.length];
if (len == 0) {
result[0] = b[0] / a[0][0];
return result;
}
double[][] aa = new double[len][len];
double[] bb = new double[len];
int posx = -1, posy = -1;
for (int i = 0; i <= len; i++) {
for (int j = 0; j <= len; j++){
if (a[i][j] != 0.0d) {
posy = j;
break;
}
}
if (posy != -1) {
posx = i;
break;
}
}
if (posx == -1) {
return null;
}
int count = 0;
for (int i = 0; i <= len; i++) {
if (i == posx) {
continue;
}
bb[count] = b[i] * a[posx][posy] - b[posx] * a[i][posy];
int count2 = 0;
for (int j = 0; j <= len; j++) {
if (j == posy) {
continue;
}
aa[count][count2] = a[i][j] * a[posx][posy] - a[posx][j]
* a[i][posy];
count2++;
}
count++;
}
double[] result2 = calcLinearEquation(aa, bb);
double sum = b[posx];
count = 0;
for (int i = 0; i <= len; i++) {
if (i == posy) {
continue;
}
sum -= a[posx][i] * result2[count];
result[i] = result2[count];
count++;
}
result[posy] = sum / a[posx][posy];
return result;
}
public static JSONObject run(double[] x, double[] y, int n,double[] result){
CurveFittingMethod leastSquareMethod = new CurveFittingMethod(x,y,n);
JSONObject jsonObject=new JSONObject();
String expression="";
expression +="y=";
for (int j=coefficient.length-1;j>=0;j--) {
if(coefficient[j]!=0.0){
expression += coefficient[j];
for(int i=0;i<j;i++){
expression +="*x";
}
if(j!=0 && coefficient[j-1]>0){
expression +="+";
}
}
}
if(expression.charAt(expression.length()-1)=='+'){
expression=expression.substring(0,expression.length()-1);
}
double[] x_data_array=new double[result.length];
double[] y_data_array=new double[result.length];
for(int i=0;i<result.length;i++){
x_data_array[i]=result[i];
y_data_array[i]=leastSquareMethod.fit(x_data_array[i]);
}
jsonObject.put("x_data_array",x_data_array);
jsonObject.put("y_data_array",y_data_array);
jsonObject.put("expression",expression);
return jsonObject;
}
}
package com.yingxin.prms.utils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpMessage;
import org.apache.http.HttpResponse;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.ConnectException;
import java.net.SocketException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
......@@ -28,7 +27,7 @@ import java.util.Map;
* Author: gaozhentao
*/
public class SendHttpUtil {
private static Logger logger = LoggerFactory.getLogger(SendHttpUtil.class);
public static Map<String,String> doGet(String uri) {
Map<String,String> map = new HashMap();
// 获得Http客户端(可以理解为:你得先有一个浏览器;注意:实际上HttpClient与浏览器是不一样的)
......@@ -65,7 +64,12 @@ public class SendHttpUtil {
if (responseEntity != null) {
map.put("body",EntityUtils.toString(responseEntity));
}
} catch (ClientProtocolException e) {
}catch (ConnectException e){
logger.error(uri+"请求超时");
}catch (ConnectTimeoutException e){
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
......@@ -117,8 +121,9 @@ public class SendHttpUtil {
map.put("body",EntityUtils.toString(responseEntity, "utf-8"));
}
// 从响应模型中获取响应实体
}
catch (ClientProtocolException e) {
}catch (ConnectException e){
logger.error(uri+"请求超时");
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
......
......@@ -8,12 +8,14 @@ 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 org.kairosdb.client.builder.QueryBuilder;
import org.springframework.http.ResponseEntity;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
......@@ -53,4 +55,20 @@ public class TimeUtil {
return password.substring(12,password.length()-24);
}
public static String toDate(long time){
Date date = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date);
}
public static Date PreviousDay(Date date){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH,
calendar.get(Calendar.DAY_OF_MONTH) - 1);// 让日期减1
return calendar.getTime();
}
}
......@@ -51,3 +51,4 @@ alarm:
tokeTime: 1200000
pointNumber: 60
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>可靠性监控</title><link href=/css/app.922e61cdab17b243300c6570c9e472b4.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/js/manifest.1766e3c7586055624ca0.js></script><script type=text/javascript src=/js/vendor.9829f477b655c50975d5.js></script><script type=text/javascript src=/js/app.9fe012d70d6830d9e466.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>可靠性监控</title><link href=/css/app.922e61cdab17b243300c6570c9e472b4.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/js/manifest.1766e3c7586055624ca0.js></script><script type=text/javascript src=/js/vendor.9829f477b655c50975d5.js></script><script type=text/javascript src=/js/app.568607172586b4f34cbd.js></script></body></html>
\ No newline at end of file
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{"version":3,"sources":["webpack:///webpack/bootstrap db0ad06037b924e66938"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,aACAA,OAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAIA,IADAL,KAAAE,EAAAC,EAAAC,GACAK,EAAAC,QACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,IAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"js/manifest.1766e3c7586055624ca0.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap db0ad06037b924e66938"],"sourceRoot":""}
\ No newline at end of file
{"version":3,"sources":["webpack:///webpack/bootstrap c68150c28f57f7da5949"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","2","exports","module","l","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","p","oe","err","console","error"],"mappings":"aACA,IAAAA,EAAAC,OAAA,aACAA,OAAA,sBAAAC,EAAAC,EAAAC,GAIA,IADA,IAAAC,EAAAC,EAAAC,EAAAC,EAAA,EAAAC,KACQD,EAAAN,EAAAQ,OAAoBF,IAC5BF,EAAAJ,EAAAM,GACAG,EAAAL,IACAG,EAAAG,KAAAD,EAAAL,GAAA,IAEAK,EAAAL,GAAA,EAEA,IAAAD,KAAAF,EACAU,OAAAC,UAAAC,eAAAC,KAAAb,EAAAE,KACAY,EAAAZ,GAAAF,EAAAE,IAIA,IADAL,KAAAE,EAAAC,EAAAC,GACAK,EAAAC,QACAD,EAAAS,OAAAT,GAEA,GAAAL,EACA,IAAAI,EAAA,EAAYA,EAAAJ,EAAAM,OAA2BF,IACvCD,EAAAY,IAAAC,EAAAhB,EAAAI,IAGA,OAAAD,GAIA,IAAAc,KAGAV,GACAW,EAAA,GAIA,SAAAH,EAAAd,GAGA,GAAAgB,EAAAhB,GACA,OAAAgB,EAAAhB,GAAAkB,QAGA,IAAAC,EAAAH,EAAAhB,IACAG,EAAAH,EACAoB,GAAA,EACAF,YAUA,OANAN,EAAAZ,GAAAW,KAAAQ,EAAAD,QAAAC,IAAAD,QAAAJ,GAGAK,EAAAC,GAAA,EAGAD,EAAAD,QAKAJ,EAAAO,EAAAT,EAGAE,EAAAQ,EAAAN,EAGAF,EAAAS,EAAA,SAAAL,EAAAM,EAAAC,GACAX,EAAAY,EAAAR,EAAAM,IACAhB,OAAAmB,eAAAT,EAAAM,GACAI,cAAA,EACAC,YAAA,EACAC,IAAAL,KAMAX,EAAAiB,EAAA,SAAAZ,GACA,IAAAM,EAAAN,KAAAa,WACA,WAA2B,OAAAb,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAL,EAAAS,EAAAE,EAAA,IAAAA,GACAA,GAIAX,EAAAY,EAAA,SAAAO,EAAAC,GAAsD,OAAA1B,OAAAC,UAAAC,eAAAC,KAAAsB,EAAAC,IAGtDpB,EAAAqB,EAAA,IAGArB,EAAAsB,GAAA,SAAAC,GAA8D,MAApBC,QAAAC,MAAAF,GAAoBA","file":"js/manifest.1766e3c7586055624ca0.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c68150c28f57f7da5949"],"sourceRoot":""}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment