From ada388b4644de6fd4051be4bab8289b293001d59 Mon Sep 17 00:00:00 2001 From: ywang19 Date: Mon, 5 Jan 2015 20:12:48 +0800 Subject: [PATCH 001/179] update version Signed-off-by: ywang19 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 44bb5d1f..985588d7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.1 \ No newline at end of file +0.4.2 From 4e543df87934e762928f6f94975977011592767d Mon Sep 17 00:00:00 2001 From: ywang19 Date: Mon, 5 Jan 2015 20:12:48 +0800 Subject: [PATCH 002/179] update version Signed-off-by: ywang19 --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 44bb5d1f..985588d7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.1 \ No newline at end of file +0.4.2 From 0a0bd9b838d6b2e1cf18e86c92d068b16d7b9db5 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Fri, 16 Jan 2015 12:56:16 +0800 Subject: [PATCH 003/179] Revert "update for v0.4.1 release" This reverts commit 2ad2cb0ed4660981fbc03442a2e9d303d651f495. --- CHANGELOG | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 19652d35..56b51631 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,14 +1,3 @@ - COSBench 0.4.1.0(14-ww53.2) ------------------------------------- -. Add one workload under workloads folder, whose distribution is summarized from two week's trace on ASUS WebStorage. Thanks ASUS' contribution! -. #223: current authorization doesn't support retry -. #222: completed operation count is mismatching with configured totalOps -. #220: UI: The current stage table shouldn't merge with stage table when workload terminates -. #212 swift show 401 error code -. #194 Config UI: Add detail to General Report Table located in view details section of Active Workloads : Need to add information about stage names -. #188 UI: Don't generate stagenames with comma characters in them - - COSBench 0.4.0.1(14-ww48.5) ------------------------------------ . #214: ceph prepare stage very low success ratio and throwing erros From 1a7325385533fb53f16e1e22fa8cacdd0b9401a6 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Fri, 16 Jan 2015 12:59:46 +0800 Subject: [PATCH 004/179] Revert "Revert "update for v0.4.1 release"" This reverts commit 0a0bd9b838d6b2e1cf18e86c92d068b16d7b9db5. --- CHANGELOG | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index 56b51631..19652d35 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,14 @@ + COSBench 0.4.1.0(14-ww53.2) +------------------------------------ +. Add one workload under workloads folder, whose distribution is summarized from two week's trace on ASUS WebStorage. Thanks ASUS' contribution! +. #223: current authorization doesn't support retry +. #222: completed operation count is mismatching with configured totalOps +. #220: UI: The current stage table shouldn't merge with stage table when workload terminates +. #212 swift show 401 error code +. #194 Config UI: Add detail to General Report Table located in view details section of Active Workloads : Need to add information about stage names +. #188 UI: Don't generate stagenames with comma characters in them + + COSBench 0.4.0.1(14-ww48.5) ------------------------------------ . #214: ceph prepare stage very low success ratio and throwing erros From 937a2cebd2a2feb06ba04feed0f6112d2ad3b4af Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Fri, 16 Jan 2015 13:10:16 +0800 Subject: [PATCH 005/179] #210 multiple drivers on the same physical node --- release/start-driver.sh | 75 +++++++++++++++++++++++++++++------------ release/stop-driver.sh | 41 ++++++++++++++++++++-- 2 files changed, 91 insertions(+), 25 deletions(-) diff --git a/release/start-driver.sh b/release/start-driver.sh index 33d3a71d..741adc1a 100644 --- a/release/start-driver.sh +++ b/release/start-driver.sh @@ -1,29 +1,60 @@ #!/bin/bash -# -#Copyright 2013 Intel Corporation, All Rights Reserved. -# -#Licensed under the Apache License, Version 2.0 (the "License"); -#you may not use this file except in compliance with the License. -#You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -#Unless required by applicable law or agreed to in writing, software -#distributed under the License is distributed on an "AS IS" BASIS, -#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -#See the License for the specific language governing permissions and -#limitations under the License. -# - -#------------------------------- -# COSBENCH DRIVER STARTER -#------------------------------- + +if [ $# -eq 0 ];then + ip=127.0.0.1 + num=1 + base_port=18088 +elif [ $# -eq 3 ];then + num=$1 + ip=$2 + base_port=$3 +else + echo ":none of parameter,create one driver" + echo ":three pareameters" + echo " <1>the number of drivers on one node" + echo " <2>the ip of driver" + echo " <3>base of port" + exit 1 +fi SERVICE_NAME=driver VERSION=`cat VERSION` - OSGI_BUNDLES="cosbench-log_${VERSION} cosbench-tomcat_${VERSION} cosbench-config_${VERSION} cosbench-http_${VERSION} cosbench-cdmi-util_${VERSION} cosbench-core_${VERSION} cosbench-core-web_${VERSION} cosbench-api_${VERSION} cosbench-mock_${VERSION} cosbench-ampli_${VERSION} cosbench-swift_${VERSION} cosbench-keystone_${VERSION} cosbench-httpauth_${VERSION} cosbench-s3_${VERSION} cosbench-librados_${VERSION} cosbench-scality_${VERSION} cosbench-cdmi-swift_${VERSION} cosbench-cdmi-base_${VERSION} cosbench-driver_${VERSION} cosbench-driver-web_${VERSION}" -OSGI_CONSOLE_PORT=18089 -sh cosbench-start.sh $SERVICE_NAME "$OSGI_BUNDLES" $OSGI_CONSOLE_PORT +rm -f ip-port.list +for i in $(seq 1 $num) +do + # driver.conf + name="" + url="" + cd conf + let "x=($i-1)*100+$base_port" + rm -f driver.conf + rm -f driver_$i.conf + cp model_driver.conf driver_$i.conf + name="$ip:$x" + url="http:\/\/$ip:$x\/driver" + sed -i "s/^name=.*$/name=${name}/" driver_$i.conf + sed -i "s/^url=.*$/url=${url}/" driver_$i.conf + ln -s driver_$i.conf driver.conf + + #make driver-tomcat-server.xml + rm -f driver-tomcat-server.xml + rm -f driver-tomcat-server_$i.xml + cp model_driver-tomcat-server.xml driver-tomcat-server_$i.xml + sed -i "s/\(.*Connector port=\"\)[^\"]*\(.*\)/\1${x}\2/" driver-tomcat-server_$i.xml + let "x=$x+1" + ln -s driver-tomcat-server_$i.xml driver-tomcat-server.xml + cd ../ + OSGI_CONSOLE_PORT=$x + sh cosbench-start.sh $SERVICE_NAME "$OSGI_BUNDLES" $OSGI_CONSOLE_PORT + + #ip/port list + echo "$name" >> ip-port.list +done + + + + + diff --git a/release/stop-driver.sh b/release/stop-driver.sh index 624a248e..ecad669b 100644 --- a/release/stop-driver.sh +++ b/release/stop-driver.sh @@ -19,8 +19,43 @@ # COSBENCH DRIVER STOPPER #------------------------------- -SERVICE_NAME=driver +checkAll(){ + cat ip-port.list |while read line + do + echo $line + port=`echo $line |awk -F ":" 'NR==1{print $NF}'` + let "x=1+$port" + OSGI_CONSOLE_PORT=$x + echo $port + SERVICE_NAME=driver + sh cosbench-stop.sh $SERVICE_NAME $OSGI_CONSOLE_PORT + done +} + +checkOne(){ + s=$(awk 'NR=='$1' {print $0}' ip-port.list) + port=`echo $s |awk -F ":" 'NR==1{print $NF}'` + let "x=1+$port" + OSGI_CONSOLE_PORT=$x + echo $port + SERVICE_NAME=driver + sh cosbench-stop.sh $SERVICE_NAME $OSGI_CONSOLE_PORT +} + +if [ $# -eq 0 ];then + checkAll +elif [ $# -eq 1 ];then + checkOne $1 +else + echo " :none parameter, stop all" + echo " :one parameter,the serial number in ip-port.list " + exit 1 +fi + + + + + + -OSGI_CONSOLE_PORT=18089 -sh cosbench-stop.sh $SERVICE_NAME $OSGI_CONSOLE_PORT From 7a117673ccd934cbe0889d178213df7557ce8b2b Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Fri, 16 Jan 2015 15:13:04 +0800 Subject: [PATCH 006/179] update #210 multiple drivers on the same physical node --- release/start-driver.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/release/start-driver.sh b/release/start-driver.sh index 741adc1a..c9709b72 100644 --- a/release/start-driver.sh +++ b/release/start-driver.sh @@ -1,16 +1,23 @@ #!/bin/bash +ip=127.0.0.1 +num=1 +base_port=18088 + if [ $# -eq 0 ];then - ip=127.0.0.1 num=1 - base_port=18088 +elif [ $# -eq 1 ]; then + num=$1 +elif [ $# -eq 2 ]; then + num=$1 + ip=$2 elif [ $# -eq 3 ];then num=$1 ip=$2 base_port=$3 else echo ":none of parameter,create one driver" - echo ":three pareameters" + echo ":pareameters" echo " <1>the number of drivers on one node" echo " <2>the ip of driver" echo " <3>base of port" From 1613d59a2357ce64dfe435a5b8e4e21f52a37f8e Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Fri, 16 Jan 2015 15:13:49 +0800 Subject: [PATCH 007/179] Revert "update #210 multiple drivers on the same physical node" This reverts commit 7a117673ccd934cbe0889d178213df7557ce8b2b. --- release/start-driver.sh | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/release/start-driver.sh b/release/start-driver.sh index c9709b72..741adc1a 100644 --- a/release/start-driver.sh +++ b/release/start-driver.sh @@ -1,23 +1,16 @@ #!/bin/bash -ip=127.0.0.1 -num=1 -base_port=18088 - if [ $# -eq 0 ];then + ip=127.0.0.1 num=1 -elif [ $# -eq 1 ]; then - num=$1 -elif [ $# -eq 2 ]; then - num=$1 - ip=$2 + base_port=18088 elif [ $# -eq 3 ];then num=$1 ip=$2 base_port=$3 else echo ":none of parameter,create one driver" - echo ":pareameters" + echo ":three pareameters" echo " <1>the number of drivers on one node" echo " <2>the ip of driver" echo " <3>base of port" From 1f491735a2499fef77ab42f91c45ecb2bc1515c5 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Fri, 16 Jan 2015 15:38:34 +0800 Subject: [PATCH 008/179] update #210 multiple drivers on the same node --- release/start-driver.sh | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/release/start-driver.sh b/release/start-driver.sh index 741adc1a..2dadcfb8 100644 --- a/release/start-driver.sh +++ b/release/start-driver.sh @@ -1,21 +1,29 @@ #!/bin/bash -if [ $# -eq 0 ];then - ip=127.0.0.1 - num=1 - base_port=18088 -elif [ $# -eq 3 ];then - num=$1 - ip=$2 - base_port=$3 -else - echo ":none of parameter,create one driver" - echo ":three pareameters" - echo " <1>the number of drivers on one node" - echo " <2>the ip of driver" - echo " <3>base of port" - exit 1 -fi +ip=127.0.0.1 +num=1 +base_port=18088 + +if [ $# -eq 0 ];then + num=1 +elif [ $# -eq 1 ]; then + num=$1 +elif [ $# -eq 2 ]; then + num=$1 + ip=$2 +elif [ $# -eq 3 ];then + num=$1 + ip=$2 + base_port=$3 +else + echo ":none of parameter,create one driver" + echo ":pareameters" + echo " <1>the number of drivers on one node" + echo " <2>the ip of driver" + echo " <3>base of port" + exit 1 +fi + SERVICE_NAME=driver VERSION=`cat VERSION` From fcd3f3000b33d3f3b0e1d1e6bc8f90b9bb8cb710 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Thu, 22 Jan 2015 17:01:34 +0800 Subject: [PATCH 009/179] Dumping of Per driver results #221 --- .../archiver/SimpleWorkloadArchiver.java | 24 ++++- .../controller/model/StageContext.java | 22 ++++- .../controller/model/WorkloadContext.java | 2 + .../controller/repository/WorkloadList.java | 3 +- .../src/com/intel/cosbench/bench/Metrics.java | 11 +++ .../src/com/intel/cosbench/bench/Report.java | 1 + .../com/intel/cosbench/bench/TaskReport.java | 31 +++++++ .../exporter/AbstractTaskExporter.java | 62 +++++++++++++ .../cosbench/exporter/CSVTaskExporter.java | 88 +++++++++++++++++++ .../intel/cosbench/exporter/Exporters.java | 12 ++- .../intel/cosbench/exporter/TaskExporter.java | 8 ++ .../com/intel/cosbench/model/StageInfo.java | 5 ++ 12 files changed, 263 insertions(+), 6 deletions(-) create mode 100644 dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java index 13f00367..4e9b45ee 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java @@ -18,8 +18,11 @@ package com.intel.cosbench.controller.archiver; import java.io.*; +import java.util.List; import java.util.Scanner; +import com.intel.cosbench.bench.Metrics; +import com.intel.cosbench.bench.TaskReport; import com.intel.cosbench.config.*; import com.intel.cosbench.config.castor.CastorConfigTools; import com.intel.cosbench.exporter.*; @@ -89,9 +92,28 @@ private void doArchive(WorkloadInfo info, File runDir) throws IOException { exportConfig(info.getWorkload(), runDir); exportLog(info, runDir); exportScriptsLog(info, runDir); - exportPerformanceMatrix(info); + exportPerformanceMatrix(info); + exportTaskInfo(info,runDir); } + private void exportTaskInfo(WorkloadInfo info,File parent)throws IOException{ + for(DriverInfo dInfo:info.getDriverInfos()){ + File file = new File(parent, dInfo.getName() + ".csv"); + Writer writer = new BufferedWriter(new FileWriter(file)); + TaskExporter exporter = Exporters.newTaskExporter(info,dInfo); + try { + exporter.export(writer); + } finally { + writer.close(); + } + String name = dInfo.getName(); + String path = file.getAbsolutePath(); + String msg = "perf details of {} has been exported to {}"; + LOGGER.debug(msg, name, path); + } + } + + private static String getRunDirName(WorkloadInfo info) { String name = info.getId(); name += '-' + info.getWorkload().getName(); diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java index c081c7a4..2ae443a0 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java @@ -46,8 +46,18 @@ public class StageContext implements StageInfo { private volatile Report report = null; // will be merged from task reports private transient List listeners = new ArrayList(); + + private List taskReports = new ArrayList(); + + public List getTaskReports() { + return taskReports; + } + + public void setTaskReports(List taskReports) { + this.taskReports = taskReports; + } - public StageContext() { + public StageContext() { /* empty */ } @@ -93,8 +103,14 @@ public Report mergeReport() { if (taskRegistry == null) return new Report(); ReportMerger merger = new ReportMerger(); - for (TaskContext task : taskRegistry) - merger.add(task.getReport()); + for (TaskContext task : taskRegistry){ + TaskReport tReport=new TaskReport(); + tReport.setReport(task.getReport()); + tReport.setDriverName(task.getSchedule().getDriver().getName()); + tReport.setDriverUrl(task.getSchedule().getDriver().getUrl()); + taskReports.add(tReport); + merger.add(task.getReport()); + } return merger.merge(); } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java index 1debe4a5..4feb7cd7 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java @@ -22,11 +22,13 @@ import com.intel.cosbench.bench.*; import com.intel.cosbench.config.*; +import com.intel.cosbench.log.LogFactory; import com.intel.cosbench.log.Logger; import com.intel.cosbench.model.*; public class WorkloadContext implements WorkloadInfo { + private static final Logger LOGGER = LogFactory.getSystemLogger(); private String id; private Date submitDate; private Date startDate; diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java index 0feee62e..1ab453ee 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java @@ -21,7 +21,8 @@ import com.intel.cosbench.controller.model.WorkloadContext; -interface WorkloadList { +interface WorkloadList + { public int count(); diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java b/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java index b1fa5c96..1b2642ad 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java @@ -229,4 +229,15 @@ public static Metrics convert(Mark mark, long window) { return metrics; } + @Override + public String toString() { + return "Metrics [name=" + name + ", opType=" + opType + ", sampleType=" + + sampleType + ", opName=" + opName + ", opId=" + opId + + ", sampleCount=" + sampleCount + ", totalSampleCount=" + + totalSampleCount + ", byteCount=" + byteCount + + ", workerCount=" + workerCount + ", avgResTime=" + avgResTime + + ", avgXferTime=" + avgXferTime + ", throughput=" + throughput + + ", bandwidth=" + bandwidth + ", latency=" + latency + + ", ratio=" + ratio + "]"; + } } diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java b/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java index 43b3196d..5b1e014f 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java @@ -40,5 +40,6 @@ public Metrics getMetrics(String name) { public Metrics[] getAllMetrics() { return getAllItems().toArray(new Metrics[getSize()]); } + } diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java b/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java new file mode 100644 index 00000000..39a0b2bb --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java @@ -0,0 +1,31 @@ +package com.intel.cosbench.bench; +/** + * The class is the data structure of task info + * + * @author liyuan + * + */ +public class TaskReport { + private String driverName; + private String driverUrl; + private Report report; + public String getDriverName() { + return driverName; + } + public void setDriverName(String driverName) { + this.driverName = driverName; + } + public String getDriverUrl() { + return driverUrl; + } + public void setDriverUrl(String driverUrl) { + this.driverUrl = driverUrl; + } + public Report getReport() { + return report; + } + public void setReport(Report report) { + this.report = report; + } + +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java new file mode 100644 index 00000000..473c237e --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java @@ -0,0 +1,62 @@ +package com.intel.cosbench.exporter; + +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; + +import com.intel.cosbench.bench.Snapshot; +import com.intel.cosbench.bench.TaskReport; +import com.intel.cosbench.model.DriverInfo; +import com.intel.cosbench.model.StageInfo; +import com.intel.cosbench.model.WorkloadInfo; + +public abstract class AbstractTaskExporter implements TaskExporter { + + protected WorkloadInfo workloadInfo; + protected DriverInfo driverInfo; + protected List driverTasks = new ArrayList(); + + public WorkloadInfo getWorkloadInfo() { + return workloadInfo; + } + + public void setWorkloadInfo(WorkloadInfo workloadInfo) { + this.workloadInfo = workloadInfo; + } + + public DriverInfo getDriverInfo() { + return driverInfo; + } + + public void setDriverInfo(DriverInfo driverInfo) { + this.driverInfo = driverInfo; + } + + + @Override + public void export(Writer writer) throws IOException { + //check every stage every task + for(StageInfo sInfo:workloadInfo.getStageInfos()){ + for(TaskReport tReport:sInfo.getTaskReports()){ + if(tReport.getDriverUrl().equals(driverInfo.getUrl())){ + driverTasks.add(tReport); + } + } + } + writeReport(writer); + } + + private void writeReport(Writer writer) throws IOException { + writeHeader(writer); + writer.flush(); + for (TaskReport tReport : driverTasks) + writeMetrics(writer, tReport); + writer.flush(); + } + + protected abstract void writeHeader(Writer writer) throws IOException; + + protected abstract void writeMetrics(Writer writer, TaskReport tReport) + throws IOException; +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java new file mode 100644 index 00000000..fb45e944 --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java @@ -0,0 +1,88 @@ +package com.intel.cosbench.exporter; + +import static com.intel.cosbench.exporter.Formats.NUM; +import static com.intel.cosbench.exporter.Formats.RATIO; +import static com.intel.cosbench.exporter.Formats.TIME; + +import java.io.IOException; +import java.io.Writer; +import java.util.Arrays; + +import org.apache.commons.lang.StringUtils; + +import com.intel.cosbench.bench.Metrics; +import com.intel.cosbench.bench.Report; +import com.intel.cosbench.bench.Snapshot; +import com.intel.cosbench.bench.TaskReport; + +public class CSVTaskExporter extends AbstractTaskExporter{ + + public CSVTaskExporter() { + /* empty */ + } + protected void writeHeader(Writer writer) throws IOException { + StringBuilder buffer = new StringBuilder(); + char[] cs = new char[8]; + buffer.append("Op-Type").append(','); + buffer.append("Sample-Type").append(','); + buffer.append("Op-Count").append(','); + buffer.append("Byte-Count").append(','); + buffer.append("Avg-ResTime").append(','); + buffer.append("Avg-ProcTime").append(','); + buffer.append("Throughput").append(','); + buffer.append("Bandwidth").append(','); + buffer.append("Succ-Ratio").append('\n'); + writer.write(buffer.toString()); + } + + protected void writeMetrics(Writer writer,TaskReport tReport)throws IOException { + StringBuilder buffer = new StringBuilder(); + Report report = tReport.getReport(); + /*Operation Type*/ + for(Metrics metrics:report) + buffer.append(metrics.getOpType()).append(','); + /*sample Type*/ + for(Metrics metrics:report) + buffer.append(metrics.getSampleType()).append(','); + /* Operation Count */ + for (Metrics metrics :report) + buffer.append(metrics.getSampleCount()).append(','); + /* Byte Count */ + for (Metrics metrics : report) + buffer.append(metrics.getByteCount()).append(','); + /* Response Time */ + for (Metrics metrics : report) { + double r = metrics.getAvgResTime(); + if (r > 0) + buffer.append(NUM.format(r)); + else + buffer.append("N/A"); + buffer.append(','); + } + /* Transfer Time */ + for (Metrics metrics : report) { + double pt = metrics.getAvgResTime() - metrics.getAvgXferTime(); + if (pt > 0) + buffer.append(NUM.format(pt)); + else + buffer.append("N/A"); + buffer.append(','); + } + /* Throughput */ + for (Metrics metrics : report) + buffer.append(NUM.format(metrics.getThroughput())).append(','); + /* Bandwidth */ + for (Metrics metrics : report) + buffer.append(NUM.format(metrics.getBandwidth())).append(','); + /* Success Ratio */ + for (Metrics metrics : report) { + double t = (double) metrics.getRatio(); + if (t > 0) + buffer.append(RATIO.format(metrics.getRatio())); + else + buffer.append("N/A"); + buffer.append('\n'); + } + writer.write(buffer.toString()); + } +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java index 1aa86dce..455d7736 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java @@ -17,15 +17,23 @@ package com.intel.cosbench.exporter; +import com.intel.cosbench.bench.TaskReport; import com.intel.cosbench.model.*; /** * This class is a wrapper to construct different exporters by providing static construction methods. * - * @author ywang19, qzheng7 + * @author ywang19, qzheng7 * */ public class Exporters { + + public static TaskExporter newTaskExporter(WorkloadInfo workloadInfo,DriverInfo driverInfo){ + AbstractTaskExporter exporter = new CSVTaskExporter(); + exporter.setWorkloadInfo(workloadInfo); + exporter.setDriverInfo(driverInfo); + return exporter; + } public static RunExporter newRunExporter(WorkloadInfo workload) { AbstractRunExporter exporter = new CSVRunExporter(); @@ -68,5 +76,7 @@ public static MatrixExporter newMatrixExporter(WorkloadInfo workload) { exporter.setWorkload(workload); return exporter; } + + } diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java new file mode 100644 index 00000000..b41c5050 --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java @@ -0,0 +1,8 @@ +package com.intel.cosbench.exporter; + +import java.io.IOException; +import java.io.Writer; + +public interface TaskExporter { + public void export(Writer writer) throws IOException; +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java b/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java index ad022bf7..15d718fc 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java +++ b/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java @@ -18,6 +18,7 @@ package com.intel.cosbench.model; import java.util.Date; +import java.util.List; import java.util.Set; import com.intel.cosbench.bench.*; @@ -57,5 +58,9 @@ public interface StageInfo extends LifeCycle, Benchmark { public void setReport(Report report); public ListRegistry getSnapshotRegistry(); + + public List getTaskReports(); + + public void setTaskReports(List taskReports); } From ccd1dbff4f226d5cde88016e3e803951f4bde51f Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Thu, 22 Jan 2015 18:23:49 +0800 Subject: [PATCH 010/179] Revert "Dumping of Per driver results #221" This reverts commit fcd3f3000b33d3f3b0e1d1e6bc8f90b9bb8cb710. --- .../archiver/SimpleWorkloadArchiver.java | 24 +---- .../controller/model/StageContext.java | 22 +---- .../controller/model/WorkloadContext.java | 2 - .../controller/repository/WorkloadList.java | 3 +- .../src/com/intel/cosbench/bench/Metrics.java | 11 --- .../src/com/intel/cosbench/bench/Report.java | 1 - .../com/intel/cosbench/bench/TaskReport.java | 31 ------- .../exporter/AbstractTaskExporter.java | 62 ------------- .../cosbench/exporter/CSVTaskExporter.java | 88 ------------------- .../intel/cosbench/exporter/Exporters.java | 12 +-- .../intel/cosbench/exporter/TaskExporter.java | 8 -- .../com/intel/cosbench/model/StageInfo.java | 5 -- 12 files changed, 6 insertions(+), 263 deletions(-) delete mode 100644 dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java delete mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java delete mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java delete mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java index 4e9b45ee..13f00367 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java @@ -18,11 +18,8 @@ package com.intel.cosbench.controller.archiver; import java.io.*; -import java.util.List; import java.util.Scanner; -import com.intel.cosbench.bench.Metrics; -import com.intel.cosbench.bench.TaskReport; import com.intel.cosbench.config.*; import com.intel.cosbench.config.castor.CastorConfigTools; import com.intel.cosbench.exporter.*; @@ -92,28 +89,9 @@ private void doArchive(WorkloadInfo info, File runDir) throws IOException { exportConfig(info.getWorkload(), runDir); exportLog(info, runDir); exportScriptsLog(info, runDir); - exportPerformanceMatrix(info); - exportTaskInfo(info,runDir); + exportPerformanceMatrix(info); } - private void exportTaskInfo(WorkloadInfo info,File parent)throws IOException{ - for(DriverInfo dInfo:info.getDriverInfos()){ - File file = new File(parent, dInfo.getName() + ".csv"); - Writer writer = new BufferedWriter(new FileWriter(file)); - TaskExporter exporter = Exporters.newTaskExporter(info,dInfo); - try { - exporter.export(writer); - } finally { - writer.close(); - } - String name = dInfo.getName(); - String path = file.getAbsolutePath(); - String msg = "perf details of {} has been exported to {}"; - LOGGER.debug(msg, name, path); - } - } - - private static String getRunDirName(WorkloadInfo info) { String name = info.getId(); name += '-' + info.getWorkload().getName(); diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java index 2ae443a0..c081c7a4 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java @@ -46,18 +46,8 @@ public class StageContext implements StageInfo { private volatile Report report = null; // will be merged from task reports private transient List listeners = new ArrayList(); - - private List taskReports = new ArrayList(); - - public List getTaskReports() { - return taskReports; - } - - public void setTaskReports(List taskReports) { - this.taskReports = taskReports; - } - public StageContext() { + public StageContext() { /* empty */ } @@ -103,14 +93,8 @@ public Report mergeReport() { if (taskRegistry == null) return new Report(); ReportMerger merger = new ReportMerger(); - for (TaskContext task : taskRegistry){ - TaskReport tReport=new TaskReport(); - tReport.setReport(task.getReport()); - tReport.setDriverName(task.getSchedule().getDriver().getName()); - tReport.setDriverUrl(task.getSchedule().getDriver().getUrl()); - taskReports.add(tReport); - merger.add(task.getReport()); - } + for (TaskContext task : taskRegistry) + merger.add(task.getReport()); return merger.merge(); } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java index 4feb7cd7..1debe4a5 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java @@ -22,13 +22,11 @@ import com.intel.cosbench.bench.*; import com.intel.cosbench.config.*; -import com.intel.cosbench.log.LogFactory; import com.intel.cosbench.log.Logger; import com.intel.cosbench.model.*; public class WorkloadContext implements WorkloadInfo { - private static final Logger LOGGER = LogFactory.getSystemLogger(); private String id; private Date submitDate; private Date startDate; diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java index 1ab453ee..0feee62e 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java @@ -21,8 +21,7 @@ import com.intel.cosbench.controller.model.WorkloadContext; -interface WorkloadList - { +interface WorkloadList { public int count(); diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java b/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java index 1b2642ad..b1fa5c96 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java @@ -229,15 +229,4 @@ public static Metrics convert(Mark mark, long window) { return metrics; } - @Override - public String toString() { - return "Metrics [name=" + name + ", opType=" + opType + ", sampleType=" - + sampleType + ", opName=" + opName + ", opId=" + opId - + ", sampleCount=" + sampleCount + ", totalSampleCount=" - + totalSampleCount + ", byteCount=" + byteCount - + ", workerCount=" + workerCount + ", avgResTime=" + avgResTime - + ", avgXferTime=" + avgXferTime + ", throughput=" + throughput - + ", bandwidth=" + bandwidth + ", latency=" + latency - + ", ratio=" + ratio + "]"; - } } diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java b/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java index 5b1e014f..43b3196d 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java @@ -40,6 +40,5 @@ public Metrics getMetrics(String name) { public Metrics[] getAllMetrics() { return getAllItems().toArray(new Metrics[getSize()]); } - } diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java b/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java deleted file mode 100644 index 39a0b2bb..00000000 --- a/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.intel.cosbench.bench; -/** - * The class is the data structure of task info - * - * @author liyuan - * - */ -public class TaskReport { - private String driverName; - private String driverUrl; - private Report report; - public String getDriverName() { - return driverName; - } - public void setDriverName(String driverName) { - this.driverName = driverName; - } - public String getDriverUrl() { - return driverUrl; - } - public void setDriverUrl(String driverUrl) { - this.driverUrl = driverUrl; - } - public Report getReport() { - return report; - } - public void setReport(Report report) { - this.report = report; - } - -} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java deleted file mode 100644 index 473c237e..00000000 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.intel.cosbench.exporter; - -import java.io.IOException; -import java.io.Writer; -import java.util.ArrayList; -import java.util.List; - -import com.intel.cosbench.bench.Snapshot; -import com.intel.cosbench.bench.TaskReport; -import com.intel.cosbench.model.DriverInfo; -import com.intel.cosbench.model.StageInfo; -import com.intel.cosbench.model.WorkloadInfo; - -public abstract class AbstractTaskExporter implements TaskExporter { - - protected WorkloadInfo workloadInfo; - protected DriverInfo driverInfo; - protected List driverTasks = new ArrayList(); - - public WorkloadInfo getWorkloadInfo() { - return workloadInfo; - } - - public void setWorkloadInfo(WorkloadInfo workloadInfo) { - this.workloadInfo = workloadInfo; - } - - public DriverInfo getDriverInfo() { - return driverInfo; - } - - public void setDriverInfo(DriverInfo driverInfo) { - this.driverInfo = driverInfo; - } - - - @Override - public void export(Writer writer) throws IOException { - //check every stage every task - for(StageInfo sInfo:workloadInfo.getStageInfos()){ - for(TaskReport tReport:sInfo.getTaskReports()){ - if(tReport.getDriverUrl().equals(driverInfo.getUrl())){ - driverTasks.add(tReport); - } - } - } - writeReport(writer); - } - - private void writeReport(Writer writer) throws IOException { - writeHeader(writer); - writer.flush(); - for (TaskReport tReport : driverTasks) - writeMetrics(writer, tReport); - writer.flush(); - } - - protected abstract void writeHeader(Writer writer) throws IOException; - - protected abstract void writeMetrics(Writer writer, TaskReport tReport) - throws IOException; -} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java deleted file mode 100644 index fb45e944..00000000 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.intel.cosbench.exporter; - -import static com.intel.cosbench.exporter.Formats.NUM; -import static com.intel.cosbench.exporter.Formats.RATIO; -import static com.intel.cosbench.exporter.Formats.TIME; - -import java.io.IOException; -import java.io.Writer; -import java.util.Arrays; - -import org.apache.commons.lang.StringUtils; - -import com.intel.cosbench.bench.Metrics; -import com.intel.cosbench.bench.Report; -import com.intel.cosbench.bench.Snapshot; -import com.intel.cosbench.bench.TaskReport; - -public class CSVTaskExporter extends AbstractTaskExporter{ - - public CSVTaskExporter() { - /* empty */ - } - protected void writeHeader(Writer writer) throws IOException { - StringBuilder buffer = new StringBuilder(); - char[] cs = new char[8]; - buffer.append("Op-Type").append(','); - buffer.append("Sample-Type").append(','); - buffer.append("Op-Count").append(','); - buffer.append("Byte-Count").append(','); - buffer.append("Avg-ResTime").append(','); - buffer.append("Avg-ProcTime").append(','); - buffer.append("Throughput").append(','); - buffer.append("Bandwidth").append(','); - buffer.append("Succ-Ratio").append('\n'); - writer.write(buffer.toString()); - } - - protected void writeMetrics(Writer writer,TaskReport tReport)throws IOException { - StringBuilder buffer = new StringBuilder(); - Report report = tReport.getReport(); - /*Operation Type*/ - for(Metrics metrics:report) - buffer.append(metrics.getOpType()).append(','); - /*sample Type*/ - for(Metrics metrics:report) - buffer.append(metrics.getSampleType()).append(','); - /* Operation Count */ - for (Metrics metrics :report) - buffer.append(metrics.getSampleCount()).append(','); - /* Byte Count */ - for (Metrics metrics : report) - buffer.append(metrics.getByteCount()).append(','); - /* Response Time */ - for (Metrics metrics : report) { - double r = metrics.getAvgResTime(); - if (r > 0) - buffer.append(NUM.format(r)); - else - buffer.append("N/A"); - buffer.append(','); - } - /* Transfer Time */ - for (Metrics metrics : report) { - double pt = metrics.getAvgResTime() - metrics.getAvgXferTime(); - if (pt > 0) - buffer.append(NUM.format(pt)); - else - buffer.append("N/A"); - buffer.append(','); - } - /* Throughput */ - for (Metrics metrics : report) - buffer.append(NUM.format(metrics.getThroughput())).append(','); - /* Bandwidth */ - for (Metrics metrics : report) - buffer.append(NUM.format(metrics.getBandwidth())).append(','); - /* Success Ratio */ - for (Metrics metrics : report) { - double t = (double) metrics.getRatio(); - if (t > 0) - buffer.append(RATIO.format(metrics.getRatio())); - else - buffer.append("N/A"); - buffer.append('\n'); - } - writer.write(buffer.toString()); - } -} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java index 455d7736..1aa86dce 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java @@ -17,23 +17,15 @@ package com.intel.cosbench.exporter; -import com.intel.cosbench.bench.TaskReport; import com.intel.cosbench.model.*; /** * This class is a wrapper to construct different exporters by providing static construction methods. * - * @author ywang19, qzheng7 + * @author ywang19, qzheng7 * */ public class Exporters { - - public static TaskExporter newTaskExporter(WorkloadInfo workloadInfo,DriverInfo driverInfo){ - AbstractTaskExporter exporter = new CSVTaskExporter(); - exporter.setWorkloadInfo(workloadInfo); - exporter.setDriverInfo(driverInfo); - return exporter; - } public static RunExporter newRunExporter(WorkloadInfo workload) { AbstractRunExporter exporter = new CSVRunExporter(); @@ -76,7 +68,5 @@ public static MatrixExporter newMatrixExporter(WorkloadInfo workload) { exporter.setWorkload(workload); return exporter; } - - } diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java deleted file mode 100644 index b41c5050..00000000 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.intel.cosbench.exporter; - -import java.io.IOException; -import java.io.Writer; - -public interface TaskExporter { - public void export(Writer writer) throws IOException; -} diff --git a/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java b/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java index 15d718fc..ad022bf7 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java +++ b/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java @@ -18,7 +18,6 @@ package com.intel.cosbench.model; import java.util.Date; -import java.util.List; import java.util.Set; import com.intel.cosbench.bench.*; @@ -58,9 +57,5 @@ public interface StageInfo extends LifeCycle, Benchmark { public void setReport(Report report); public ListRegistry getSnapshotRegistry(); - - public List getTaskReports(); - - public void setTaskReports(List taskReports); } From f317e32dc22b1a61aa38ef97a4aa5e2773d5c8f4 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Thu, 22 Jan 2015 18:24:34 +0800 Subject: [PATCH 011/179] Revert "Revert "Dumping of Per driver results #221"" This reverts commit ccd1dbff4f226d5cde88016e3e803951f4bde51f. --- .../archiver/SimpleWorkloadArchiver.java | 24 ++++- .../controller/model/StageContext.java | 22 ++++- .../controller/model/WorkloadContext.java | 2 + .../controller/repository/WorkloadList.java | 3 +- .../src/com/intel/cosbench/bench/Metrics.java | 11 +++ .../src/com/intel/cosbench/bench/Report.java | 1 + .../com/intel/cosbench/bench/TaskReport.java | 31 +++++++ .../exporter/AbstractTaskExporter.java | 62 +++++++++++++ .../cosbench/exporter/CSVTaskExporter.java | 88 +++++++++++++++++++ .../intel/cosbench/exporter/Exporters.java | 12 ++- .../intel/cosbench/exporter/TaskExporter.java | 8 ++ .../com/intel/cosbench/model/StageInfo.java | 5 ++ 12 files changed, 263 insertions(+), 6 deletions(-) create mode 100644 dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java index 13f00367..4e9b45ee 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java @@ -18,8 +18,11 @@ package com.intel.cosbench.controller.archiver; import java.io.*; +import java.util.List; import java.util.Scanner; +import com.intel.cosbench.bench.Metrics; +import com.intel.cosbench.bench.TaskReport; import com.intel.cosbench.config.*; import com.intel.cosbench.config.castor.CastorConfigTools; import com.intel.cosbench.exporter.*; @@ -89,9 +92,28 @@ private void doArchive(WorkloadInfo info, File runDir) throws IOException { exportConfig(info.getWorkload(), runDir); exportLog(info, runDir); exportScriptsLog(info, runDir); - exportPerformanceMatrix(info); + exportPerformanceMatrix(info); + exportTaskInfo(info,runDir); } + private void exportTaskInfo(WorkloadInfo info,File parent)throws IOException{ + for(DriverInfo dInfo:info.getDriverInfos()){ + File file = new File(parent, dInfo.getName() + ".csv"); + Writer writer = new BufferedWriter(new FileWriter(file)); + TaskExporter exporter = Exporters.newTaskExporter(info,dInfo); + try { + exporter.export(writer); + } finally { + writer.close(); + } + String name = dInfo.getName(); + String path = file.getAbsolutePath(); + String msg = "perf details of {} has been exported to {}"; + LOGGER.debug(msg, name, path); + } + } + + private static String getRunDirName(WorkloadInfo info) { String name = info.getId(); name += '-' + info.getWorkload().getName(); diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java index c081c7a4..2ae443a0 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/StageContext.java @@ -46,8 +46,18 @@ public class StageContext implements StageInfo { private volatile Report report = null; // will be merged from task reports private transient List listeners = new ArrayList(); + + private List taskReports = new ArrayList(); + + public List getTaskReports() { + return taskReports; + } + + public void setTaskReports(List taskReports) { + this.taskReports = taskReports; + } - public StageContext() { + public StageContext() { /* empty */ } @@ -93,8 +103,14 @@ public Report mergeReport() { if (taskRegistry == null) return new Report(); ReportMerger merger = new ReportMerger(); - for (TaskContext task : taskRegistry) - merger.add(task.getReport()); + for (TaskContext task : taskRegistry){ + TaskReport tReport=new TaskReport(); + tReport.setReport(task.getReport()); + tReport.setDriverName(task.getSchedule().getDriver().getName()); + tReport.setDriverUrl(task.getSchedule().getDriver().getUrl()); + taskReports.add(tReport); + merger.add(task.getReport()); + } return merger.merge(); } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java index 1debe4a5..4feb7cd7 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/WorkloadContext.java @@ -22,11 +22,13 @@ import com.intel.cosbench.bench.*; import com.intel.cosbench.config.*; +import com.intel.cosbench.log.LogFactory; import com.intel.cosbench.log.Logger; import com.intel.cosbench.model.*; public class WorkloadContext implements WorkloadInfo { + private static final Logger LOGGER = LogFactory.getSystemLogger(); private String id; private Date submitDate; private Date startDate; diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java index 0feee62e..1ab453ee 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/repository/WorkloadList.java @@ -21,7 +21,8 @@ import com.intel.cosbench.controller.model.WorkloadContext; -interface WorkloadList { +interface WorkloadList + { public int count(); diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java b/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java index b1fa5c96..1b2642ad 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java @@ -229,4 +229,15 @@ public static Metrics convert(Mark mark, long window) { return metrics; } + @Override + public String toString() { + return "Metrics [name=" + name + ", opType=" + opType + ", sampleType=" + + sampleType + ", opName=" + opName + ", opId=" + opId + + ", sampleCount=" + sampleCount + ", totalSampleCount=" + + totalSampleCount + ", byteCount=" + byteCount + + ", workerCount=" + workerCount + ", avgResTime=" + avgResTime + + ", avgXferTime=" + avgXferTime + ", throughput=" + throughput + + ", bandwidth=" + bandwidth + ", latency=" + latency + + ", ratio=" + ratio + "]"; + } } diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java b/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java index 43b3196d..5b1e014f 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/Report.java @@ -40,5 +40,6 @@ public Metrics getMetrics(String name) { public Metrics[] getAllMetrics() { return getAllItems().toArray(new Metrics[getSize()]); } + } diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java b/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java new file mode 100644 index 00000000..39a0b2bb --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/TaskReport.java @@ -0,0 +1,31 @@ +package com.intel.cosbench.bench; +/** + * The class is the data structure of task info + * + * @author liyuan + * + */ +public class TaskReport { + private String driverName; + private String driverUrl; + private Report report; + public String getDriverName() { + return driverName; + } + public void setDriverName(String driverName) { + this.driverName = driverName; + } + public String getDriverUrl() { + return driverUrl; + } + public void setDriverUrl(String driverUrl) { + this.driverUrl = driverUrl; + } + public Report getReport() { + return report; + } + public void setReport(Report report) { + this.report = report; + } + +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java new file mode 100644 index 00000000..473c237e --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractTaskExporter.java @@ -0,0 +1,62 @@ +package com.intel.cosbench.exporter; + +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; + +import com.intel.cosbench.bench.Snapshot; +import com.intel.cosbench.bench.TaskReport; +import com.intel.cosbench.model.DriverInfo; +import com.intel.cosbench.model.StageInfo; +import com.intel.cosbench.model.WorkloadInfo; + +public abstract class AbstractTaskExporter implements TaskExporter { + + protected WorkloadInfo workloadInfo; + protected DriverInfo driverInfo; + protected List driverTasks = new ArrayList(); + + public WorkloadInfo getWorkloadInfo() { + return workloadInfo; + } + + public void setWorkloadInfo(WorkloadInfo workloadInfo) { + this.workloadInfo = workloadInfo; + } + + public DriverInfo getDriverInfo() { + return driverInfo; + } + + public void setDriverInfo(DriverInfo driverInfo) { + this.driverInfo = driverInfo; + } + + + @Override + public void export(Writer writer) throws IOException { + //check every stage every task + for(StageInfo sInfo:workloadInfo.getStageInfos()){ + for(TaskReport tReport:sInfo.getTaskReports()){ + if(tReport.getDriverUrl().equals(driverInfo.getUrl())){ + driverTasks.add(tReport); + } + } + } + writeReport(writer); + } + + private void writeReport(Writer writer) throws IOException { + writeHeader(writer); + writer.flush(); + for (TaskReport tReport : driverTasks) + writeMetrics(writer, tReport); + writer.flush(); + } + + protected abstract void writeHeader(Writer writer) throws IOException; + + protected abstract void writeMetrics(Writer writer, TaskReport tReport) + throws IOException; +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java new file mode 100644 index 00000000..fb45e944 --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVTaskExporter.java @@ -0,0 +1,88 @@ +package com.intel.cosbench.exporter; + +import static com.intel.cosbench.exporter.Formats.NUM; +import static com.intel.cosbench.exporter.Formats.RATIO; +import static com.intel.cosbench.exporter.Formats.TIME; + +import java.io.IOException; +import java.io.Writer; +import java.util.Arrays; + +import org.apache.commons.lang.StringUtils; + +import com.intel.cosbench.bench.Metrics; +import com.intel.cosbench.bench.Report; +import com.intel.cosbench.bench.Snapshot; +import com.intel.cosbench.bench.TaskReport; + +public class CSVTaskExporter extends AbstractTaskExporter{ + + public CSVTaskExporter() { + /* empty */ + } + protected void writeHeader(Writer writer) throws IOException { + StringBuilder buffer = new StringBuilder(); + char[] cs = new char[8]; + buffer.append("Op-Type").append(','); + buffer.append("Sample-Type").append(','); + buffer.append("Op-Count").append(','); + buffer.append("Byte-Count").append(','); + buffer.append("Avg-ResTime").append(','); + buffer.append("Avg-ProcTime").append(','); + buffer.append("Throughput").append(','); + buffer.append("Bandwidth").append(','); + buffer.append("Succ-Ratio").append('\n'); + writer.write(buffer.toString()); + } + + protected void writeMetrics(Writer writer,TaskReport tReport)throws IOException { + StringBuilder buffer = new StringBuilder(); + Report report = tReport.getReport(); + /*Operation Type*/ + for(Metrics metrics:report) + buffer.append(metrics.getOpType()).append(','); + /*sample Type*/ + for(Metrics metrics:report) + buffer.append(metrics.getSampleType()).append(','); + /* Operation Count */ + for (Metrics metrics :report) + buffer.append(metrics.getSampleCount()).append(','); + /* Byte Count */ + for (Metrics metrics : report) + buffer.append(metrics.getByteCount()).append(','); + /* Response Time */ + for (Metrics metrics : report) { + double r = metrics.getAvgResTime(); + if (r > 0) + buffer.append(NUM.format(r)); + else + buffer.append("N/A"); + buffer.append(','); + } + /* Transfer Time */ + for (Metrics metrics : report) { + double pt = metrics.getAvgResTime() - metrics.getAvgXferTime(); + if (pt > 0) + buffer.append(NUM.format(pt)); + else + buffer.append("N/A"); + buffer.append(','); + } + /* Throughput */ + for (Metrics metrics : report) + buffer.append(NUM.format(metrics.getThroughput())).append(','); + /* Bandwidth */ + for (Metrics metrics : report) + buffer.append(NUM.format(metrics.getBandwidth())).append(','); + /* Success Ratio */ + for (Metrics metrics : report) { + double t = (double) metrics.getRatio(); + if (t > 0) + buffer.append(RATIO.format(metrics.getRatio())); + else + buffer.append("N/A"); + buffer.append('\n'); + } + writer.write(buffer.toString()); + } +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java index 1aa86dce..455d7736 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java @@ -17,15 +17,23 @@ package com.intel.cosbench.exporter; +import com.intel.cosbench.bench.TaskReport; import com.intel.cosbench.model.*; /** * This class is a wrapper to construct different exporters by providing static construction methods. * - * @author ywang19, qzheng7 + * @author ywang19, qzheng7 * */ public class Exporters { + + public static TaskExporter newTaskExporter(WorkloadInfo workloadInfo,DriverInfo driverInfo){ + AbstractTaskExporter exporter = new CSVTaskExporter(); + exporter.setWorkloadInfo(workloadInfo); + exporter.setDriverInfo(driverInfo); + return exporter; + } public static RunExporter newRunExporter(WorkloadInfo workload) { AbstractRunExporter exporter = new CSVRunExporter(); @@ -68,5 +76,7 @@ public static MatrixExporter newMatrixExporter(WorkloadInfo workload) { exporter.setWorkload(workload); return exporter; } + + } diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java new file mode 100644 index 00000000..b41c5050 --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/TaskExporter.java @@ -0,0 +1,8 @@ +package com.intel.cosbench.exporter; + +import java.io.IOException; +import java.io.Writer; + +public interface TaskExporter { + public void export(Writer writer) throws IOException; +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java b/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java index ad022bf7..15d718fc 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java +++ b/dev/cosbench-core/src/com/intel/cosbench/model/StageInfo.java @@ -18,6 +18,7 @@ package com.intel.cosbench.model; import java.util.Date; +import java.util.List; import java.util.Set; import com.intel.cosbench.bench.*; @@ -57,5 +58,9 @@ public interface StageInfo extends LifeCycle, Benchmark { public void setReport(Report report); public ListRegistry getSnapshotRegistry(); + + public List getTaskReports(); + + public void setTaskReports(List taskReports); } From 8ce66a502c096d45d70a8e9891e04b541bdf0d82 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Fri, 23 Jan 2015 11:03:36 +0800 Subject: [PATCH 012/179] update#221 --- .../src/com/intel/cosbench/bench/Metrics.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java b/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java index 1b2642ad..6c93862f 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java +++ b/dev/cosbench-core/src/com/intel/cosbench/bench/Metrics.java @@ -228,16 +228,4 @@ public static Metrics convert(Mark mark, long window) { metrics.setBandwidth(bytes > 0 ? ((double) bytes) / window * 1000 : 0); return metrics; } - - @Override - public String toString() { - return "Metrics [name=" + name + ", opType=" + opType + ", sampleType=" - + sampleType + ", opName=" + opName + ", opId=" + opId - + ", sampleCount=" + sampleCount + ", totalSampleCount=" - + totalSampleCount + ", byteCount=" + byteCount - + ", workerCount=" + workerCount + ", avgResTime=" + avgResTime - + ", avgXferTime=" + avgXferTime + ", throughput=" + throughput - + ", bandwidth=" + bandwidth + ", latency=" + latency - + ", ratio=" + ratio + "]"; - } } From 931075b2b4edd11818546c0293d6053a4d9e96ee Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Tue, 27 Jan 2015 20:28:56 +0800 Subject: [PATCH 013/179] #221 Dumping of Per worker results --- .../archiver/SimpleWorkloadArchiver.java | 20 +++++- .../controller/model/TaskContext.java | 15 +++- .../cosbench/controller/tasklet/Closer.java | 7 +- .../exporter/AbstractWorkerExporter.java | 49 +++++++++++++ .../cosbench/exporter/CSVWorkerExporter.java | 72 +++++++++++++++++++ .../intel/cosbench/exporter/Exporters.java | 6 ++ .../cosbench/exporter/WorkerExporter.java | 8 +++ .../com/intel/cosbench/model/MissionInfo.java | 6 +- .../com/intel/cosbench/model/TaskInfo.java | 5 ++ .../cosbench/protocol/CloseResponse.java | 13 +++- .../cosbench/driver/handler/CloseHandler.java | 10 +++ .../cosbench/driver/model/MissionContext.java | 10 ++- 12 files changed, 213 insertions(+), 8 deletions(-) create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractWorkerExporter.java create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/CSVWorkerExporter.java create mode 100644 dev/cosbench-core/src/com/intel/cosbench/exporter/WorkerExporter.java diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java index 4e9b45ee..99aef1b8 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/archiver/SimpleWorkloadArchiver.java @@ -94,13 +94,31 @@ private void doArchive(WorkloadInfo info, File runDir) throws IOException { exportScriptsLog(info, runDir); exportPerformanceMatrix(info); exportTaskInfo(info,runDir); + exportWorkerInfo(info,runDir); + } + + private void exportWorkerInfo(WorkloadInfo info,File parent)throws IOException{ + for(StageInfo sInfo :info.getStageInfos()){ + File file = new File(parent,getStageFileName(sInfo) +"-worker"+ ".csv"); + Writer writer = new BufferedWriter(new FileWriter(file)); + WorkerExporter exporter = Exporters.newWorkExporter(sInfo); + try { + exporter.export(writer); + } finally { + writer.close(); + } + String name = sInfo.getId()+"worker"; + String path = file.getAbsolutePath(); + String msg = "perf details of {} has been exported to {}"; + LOGGER.debug(msg, name, path); + } } private void exportTaskInfo(WorkloadInfo info,File parent)throws IOException{ for(DriverInfo dInfo:info.getDriverInfos()){ File file = new File(parent, dInfo.getName() + ".csv"); Writer writer = new BufferedWriter(new FileWriter(file)); - TaskExporter exporter = Exporters.newTaskExporter(info,dInfo); + TaskExporter exporter = Exporters.newTaskExporter(info,dInfo); try { exporter.export(writer); } finally { diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/TaskContext.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/TaskContext.java index 767a786f..d0f23a7e 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/model/TaskContext.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/model/TaskContext.java @@ -17,6 +17,8 @@ package com.intel.cosbench.controller.model; +import java.awt.List; +import java.util.ArrayList; import java.util.HashMap; import org.apache.http.client.HttpClient; @@ -46,9 +48,18 @@ public class TaskContext implements TaskInfo { /* Each task starts with an empty error statistics log*/ private volatile transient HashMap errorStatistics = new HashMap(); - + /*Each task for workers report starts with empty*/ + private ArrayList wrReport = new ArrayList(); - public TaskContext() { + public ArrayList getWrReport() { + return wrReport; + } + + public void setWrReport(ArrayList wrReport) { + this.wrReport = wrReport; + } + + public TaskContext() { /* empty */ } diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/tasklet/Closer.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/tasklet/Closer.java index 668c742a..9deb1ace 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/tasklet/Closer.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/tasklet/Closer.java @@ -17,6 +17,8 @@ package com.intel.cosbench.controller.tasklet; +import java.util.List; + import com.intel.cosbench.bench.*; import com.intel.cosbench.controller.model.TaskContext; import com.intel.cosbench.protocol.CloseResponse; @@ -55,6 +57,9 @@ protected void handleResponse(CloseResponse response) { context.setLog(response.getDriverLog()); context.setState(response.getState()); context.setErrorStatistics(response.getErrorStatistics()); + + for(Metrics metrics : response.getWrReport()){ + context.getWrReport().add(metrics); + } } - } diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractWorkerExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractWorkerExporter.java new file mode 100644 index 00000000..6ce772b5 --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/AbstractWorkerExporter.java @@ -0,0 +1,49 @@ +package com.intel.cosbench.exporter; + +import java.io.IOException; +import java.io.Writer; +import java.util.ArrayList; +import java.util.List; + +import com.intel.cosbench.bench.Metrics; +import com.intel.cosbench.bench.Report; +import com.intel.cosbench.bench.TaskReport; +import com.intel.cosbench.model.DriverInfo; +import com.intel.cosbench.model.StageInfo; +import com.intel.cosbench.model.TaskInfo; +import com.intel.cosbench.model.WorkloadInfo; + +public abstract class AbstractWorkerExporter implements WorkerExporter { + + private StageInfo stageInfo; + + public StageInfo getStageInfo() { + return stageInfo; + } + + public void setStageInfo(StageInfo stageInfo) { + this.stageInfo = stageInfo; + } + + @Override + public void export(Writer writer) throws IOException { + writeReport(writer); + } + + private void writeReport(Writer writer) throws IOException { + writeHeader(writer); + writer.flush(); + for(TaskInfo taskInfo : stageInfo.getTaskInfos()){ + for(Metrics metrics: taskInfo.getWrReport()){ + writeMetrics(writer,metrics); + } + } + writer.flush(); + } + + protected abstract void writeHeader(Writer writer) throws IOException; + + protected abstract void writeMetrics(Writer writer, Metrics metrics) + throws IOException; + +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVWorkerExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVWorkerExporter.java new file mode 100644 index 00000000..bb3fe52d --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/CSVWorkerExporter.java @@ -0,0 +1,72 @@ +package com.intel.cosbench.exporter; + +import static com.intel.cosbench.exporter.Formats.NUM; +import static com.intel.cosbench.exporter.Formats.RATIO; + +import java.io.IOException; +import java.io.Writer; + +import com.intel.cosbench.bench.Metrics; +import com.intel.cosbench.bench.Report; +import com.intel.cosbench.bench.TaskReport; + +public class CSVWorkerExporter extends AbstractWorkerExporter{ + + @Override + protected void writeHeader(Writer writer) throws IOException { + StringBuilder buffer = new StringBuilder(); + char[] cs = new char[8]; + buffer.append("Op-Type").append(','); + buffer.append("Sample-Type").append(','); + buffer.append("Op-Count").append(','); + buffer.append("Byte-Count").append(','); + buffer.append("Avg-ResTime").append(','); + buffer.append("Avg-ProcTime").append(','); + buffer.append("Throughput").append(','); + buffer.append("Bandwidth").append(','); + buffer.append("Succ-Ratio").append('\n'); + writer.write(buffer.toString()); + } + + @Override + protected void writeMetrics(Writer writer,Metrics metrics)throws IOException { + StringBuilder buffer = new StringBuilder(); + /*Operation Type*/ + buffer.append(metrics.getOpType()).append(','); + /*sample Type*/ + buffer.append(metrics.getSampleType()).append(','); + /* Operation Count */ + buffer.append(metrics.getSampleCount()).append(','); + /* Byte Count */ + buffer.append(metrics.getByteCount()).append(','); + /* Response Time */ + double r = metrics.getAvgResTime(); + if (r > 0) + buffer.append(NUM.format(r)); + else + buffer.append("N/A"); + buffer.append(','); + + /* Transfer Time */ + double pt = metrics.getAvgResTime() - metrics.getAvgXferTime(); + if (pt > 0) + buffer.append(NUM.format(pt)); + else + buffer.append("N/A"); + buffer.append(','); + + /* Throughput */ + buffer.append(NUM.format(metrics.getThroughput())).append(','); + /* Bandwidth */ + buffer.append(NUM.format(metrics.getBandwidth())).append(','); + /* Success Ratio */ + double t = (double) metrics.getRatio(); + if (t > 0) + buffer.append(RATIO.format(metrics.getRatio())); + else + buffer.append("N/A"); + buffer.append('\n'); + writer.write(buffer.toString()); + } + +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java index 455d7736..b3712c45 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/Exporters.java @@ -28,6 +28,12 @@ */ public class Exporters { + public static WorkerExporter newWorkExporter(StageInfo info){ + AbstractWorkerExporter exporter = new CSVWorkerExporter(); + exporter.setStageInfo(info); + return exporter; + } + public static TaskExporter newTaskExporter(WorkloadInfo workloadInfo,DriverInfo driverInfo){ AbstractTaskExporter exporter = new CSVTaskExporter(); exporter.setWorkloadInfo(workloadInfo); diff --git a/dev/cosbench-core/src/com/intel/cosbench/exporter/WorkerExporter.java b/dev/cosbench-core/src/com/intel/cosbench/exporter/WorkerExporter.java new file mode 100644 index 00000000..ba4552a8 --- /dev/null +++ b/dev/cosbench-core/src/com/intel/cosbench/exporter/WorkerExporter.java @@ -0,0 +1,8 @@ +package com.intel.cosbench.exporter; + +import java.io.IOException; +import java.io.Writer; + +public interface WorkerExporter { + public void export(Writer writer) throws IOException; +} diff --git a/dev/cosbench-core/src/com/intel/cosbench/model/MissionInfo.java b/dev/cosbench-core/src/com/intel/cosbench/model/MissionInfo.java index 76cffe2e..8170fddc 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/model/MissionInfo.java +++ b/dev/cosbench-core/src/com/intel/cosbench/model/MissionInfo.java @@ -18,9 +18,11 @@ package com.intel.cosbench.model; import java.util.Date; +import java.util.List; import com.intel.cosbench.bench.Benchmark; import com.intel.cosbench.bench.ErrorStatistics; +import com.intel.cosbench.bench.Report; import com.intel.cosbench.config.Mission; import com.intel.cosbench.log.LogManager; @@ -43,5 +45,7 @@ public interface MissionInfo extends LifeCycle, Benchmark { public WorkerInfo[] getWorkerInfos(); public ErrorStatistics getErrorStatistics(); - + + public List getWorkerReports(); + } diff --git a/dev/cosbench-core/src/com/intel/cosbench/model/TaskInfo.java b/dev/cosbench-core/src/com/intel/cosbench/model/TaskInfo.java index 520d8e82..dbe1b867 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/model/TaskInfo.java +++ b/dev/cosbench-core/src/com/intel/cosbench/model/TaskInfo.java @@ -17,7 +17,10 @@ package com.intel.cosbench.model; +import java.util.ArrayList; + import com.intel.cosbench.bench.Benchmark; +import com.intel.cosbench.bench.Metrics; public interface TaskInfo extends LifeCycle, Benchmark { @@ -30,5 +33,7 @@ public interface TaskInfo extends LifeCycle, Benchmark { public ScheduleInfo getSchedule(); public String getLog(); + + public ArrayList getWrReport(); } diff --git a/dev/cosbench-core/src/com/intel/cosbench/protocol/CloseResponse.java b/dev/cosbench-core/src/com/intel/cosbench/protocol/CloseResponse.java index fb9b0694..313791f7 100644 --- a/dev/cosbench-core/src/com/intel/cosbench/protocol/CloseResponse.java +++ b/dev/cosbench-core/src/com/intel/cosbench/protocol/CloseResponse.java @@ -17,10 +17,12 @@ package com.intel.cosbench.protocol; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import com.intel.cosbench.bench.Metrics; +import com.intel.cosbench.bench.Report; import com.intel.cosbench.model.TaskState; /** @@ -35,8 +37,17 @@ public class CloseResponse extends Response { private String driverLog; /* driver log */ private TaskState state; private HashMap errorStatistics; /* mission error statistics*/ + private List wrReport; - public CloseResponse() { + public List getWrReport() { + return wrReport; + } + + public void setWrReport(List wrReport) { + this.wrReport = wrReport; + } + + public CloseResponse() { /* empty */ } diff --git a/dev/cosbench-driver-web/src/com/intel/cosbench/driver/handler/CloseHandler.java b/dev/cosbench-driver-web/src/com/intel/cosbench/driver/handler/CloseHandler.java index c8363a47..f13192af 100644 --- a/dev/cosbench-driver-web/src/com/intel/cosbench/driver/handler/CloseHandler.java +++ b/dev/cosbench-driver-web/src/com/intel/cosbench/driver/handler/CloseHandler.java @@ -21,9 +21,12 @@ import static com.intel.cosbench.model.MissionState.FAILED; import java.io.IOException; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.List; +import com.intel.cosbench.bench.Metrics; import com.intel.cosbench.bench.Report; import com.intel.cosbench.model.MissionInfo; import com.intel.cosbench.model.TaskState; @@ -43,6 +46,13 @@ protected Response process(MissionInfo info) { private Response getResponse(MissionInfo info) { CloseResponse response = new CloseResponse(); Report report = info.getReport(); + List wrReport = new ArrayList(); + for(Report wReport:info.getWorkerReports()){ + for(Metrics metrics : wReport){ + wrReport.add(metrics); + } + } + response.setWrReport(wrReport); response.setReport(Arrays.asList(report.getAllMetrics())); if (info.getState().equals(FAILED)) response.setState(TaskState.FAILED); diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/model/MissionContext.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/model/MissionContext.java index 3fa31af0..47119532 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/model/MissionContext.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/model/MissionContext.java @@ -59,6 +59,14 @@ public class MissionContext implements MissionInfo { private static final String GENERATE_HISTOGRAM_KEY = "histogram"; private static final boolean DEFAULT_GENERATE_HISTOGRAM = true; + public List getWorkerReports(){ + List wReports = new ArrayList(); + for(WorkerContext wContext:workerRegistry){ + wReports.add(wContext.getReport()); + } + return wReports; + } + public MissionContext() { errorStatistics = new ErrorStatistics(); } @@ -159,8 +167,6 @@ public void setLogManager(LogManager logManager) { this.logManager = logManager; } - - public ErrorStatistics getErrorStatistics() { return errorStatistics; } From 9f289e7e510e50f2ca76b63647f029d42af52c93 Mon Sep 17 00:00:00 2001 From: xiaoerlyl Date: Wed, 28 Jan 2015 11:06:27 +0800 Subject: [PATCH 014/179] version unify script --- version_unify.sh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 version_unify.sh diff --git a/version_unify.sh b/version_unify.sh new file mode 100644 index 00000000..0eda0fe6 --- /dev/null +++ b/version_unify.sh @@ -0,0 +1,24 @@ +#!/bin/bash +release_id=`cat VERSION`'.'$(date +%Y%m%d) +echo "release id is: "$release_id +for dir in `ls dev` +do + f='dev/'$dir"/META-INF/MANIFEST.MF" + if [ -f $f ] + then + sed -i "s/[0-9]\.[0-9]\.[0-9]\.[0-9]\{8\}/$release_id/g" $f + echo "file: "$f" is updated" + fi +done +for module in {driver,controller} +do + web="dev/cosbench-"$module"-web/WEB-INF/freemarker/header.ftl" + if [ -f $web ] + then + sed -i "s/[0-9]\.[0-9]\.[0-9]\.[0-9]\{8\}/$release_id/g" $web + echo "file "$web " is updated" + fi +done + + + From 663367dc67fe435a372f15e27f9663dd81155961 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Wed, 28 Jan 2015 11:15:24 +0800 Subject: [PATCH 015/179] patch for multi driver issues --- release/conf/model_driver-tomcat-server.xml | 12 ++++++++++++ release/conf/model_driver.conf | 3 +++ 2 files changed, 15 insertions(+) create mode 100644 release/conf/model_driver-tomcat-server.xml create mode 100644 release/conf/model_driver.conf diff --git a/release/conf/model_driver-tomcat-server.xml b/release/conf/model_driver-tomcat-server.xml new file mode 100644 index 00000000..cc37fe5e --- /dev/null +++ b/release/conf/model_driver-tomcat-server.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/release/conf/model_driver.conf b/release/conf/model_driver.conf new file mode 100644 index 00000000..5c920b1f --- /dev/null +++ b/release/conf/model_driver.conf @@ -0,0 +1,3 @@ +[driver] +name=driver +url=http://127.0.0.1:18088/driver From 11f094fe95b44509a97ae6a8b015a43f4478cd91 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Thu, 29 Jan 2015 18:37:45 +0800 Subject: [PATCH 016/179] commit test --- TestCommit.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 TestCommit.txt diff --git a/TestCommit.txt b/TestCommit.txt new file mode 100644 index 00000000..13d200ae --- /dev/null +++ b/TestCommit.txt @@ -0,0 +1 @@ +fot test github commit \ No newline at end of file From a9ab0c24f80a9c505f71a616a66f6f5938bee0e6 Mon Sep 17 00:00:00 2001 From: xiaoerlyl Date: Fri, 30 Jan 2015 22:47:30 +0800 Subject: [PATCH 017/179] fix the loopback ip bingding bug --- .../intel/cosbench/controller/service/PingDriverRunner.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/PingDriverRunner.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/PingDriverRunner.java index 30b9bbee..7d936b5b 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/PingDriverRunner.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/PingDriverRunner.java @@ -53,7 +53,7 @@ private void pingDrivers(DriverInfo[] driverInfos) { try{ Socket socket = new Socket(); InetSocketAddress reAddress = new InetSocketAddress(ipAddress, 18088); - InetSocketAddress locAddress = new InetSocketAddress("127.0.0.1", 0); + InetSocketAddress locAddress = new InetSocketAddress("0.0.0.0", 0); socket.bind(locAddress); socket.connect(reAddress,3000); isAlive = true; @@ -72,6 +72,7 @@ private String getIpAddres(String url) { int end = url.lastIndexOf(':'); return end > start ? url.substring(start, end) : null; } + } From ef4f73e2425b9ea4b83413357ebf1a0ee20fafca Mon Sep 17 00:00:00 2001 From: xiaoerlyl Date: Mon, 2 Feb 2015 12:57:29 +0800 Subject: [PATCH 018/179] Get the driver ports for controller to ping --- .../cosbench/controller/service/PingDriverRunner.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/PingDriverRunner.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/PingDriverRunner.java index 7d936b5b..f61bc300 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/PingDriverRunner.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/PingDriverRunner.java @@ -48,11 +48,12 @@ private void pingDrivers(DriverInfo[] driverInfos) { boolean isAlive = false; String ipAddress = getIpAddres(driver.getUrl()); + Integer port = getDriverPort(driver.getUrl()); try { if (!ipAddress.isEmpty()) { try{ Socket socket = new Socket(); - InetSocketAddress reAddress = new InetSocketAddress(ipAddress, 18088); + InetSocketAddress reAddress = new InetSocketAddress(ipAddress, port); InetSocketAddress locAddress = new InetSocketAddress("0.0.0.0", 0); socket.bind(locAddress); socket.connect(reAddress,3000); @@ -72,6 +73,12 @@ private String getIpAddres(String url) { int end = url.lastIndexOf(':'); return end > start ? url.substring(start, end) : null; } + + private Integer getDriverPort(String url) { + int start = url.lastIndexOf(":")+1; + int end = url.lastIndexOf("/"); + return end > start? Integer.valueOf(url.substring(start, end)):null; + } } From 7db70746fa012aea212edd670de478d54305802f Mon Sep 17 00:00:00 2001 From: ywang19 Date: Thu, 5 Feb 2015 13:39:05 +0800 Subject: [PATCH 019/179] fix #238: Working with Ceph 0.87 encountered errors Signed-off-by: ywang19 --- dev/cosbench-librados/rados.jar | Bin 63296 -> 71771 bytes .../api/librados/LibradosStorage.java | 2 +- .../api/librados/TestLibradosStorage.java | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/cosbench-librados/rados.jar b/dev/cosbench-librados/rados.jar index 51aaf257e2febc2ba33a979c3a391c383d4df650..0264ef969d02fc926f6f4d895652b9c55b43615b 100644 GIT binary patch literal 71771 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

GM1FE80Qo_`h%;}Or}tIRz91O3S%u_ALL;@l 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%0Da!4a}|8jll!yTmb-urmZA#-y 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 Date: Thu, 5 Feb 2015 19:19:50 +0800 Subject: [PATCH 020/179] #5 real-time performance graph --- .../WEB-INF/freemarker/finalchart.ftl | 68 ++++++++++++++++ .../WEB-INF/freemarker/forchart.ftl | 77 +++++++++++++++++++ .../WEB-INF/freemarker/runningchart.ftl | 61 +++++++++++++++ .../WEB-INF/freemarker/workload.ftl | 30 ++++++++ dev/cosbench-controller-web/WEB-INF/web.xml | 8 ++ .../resources/build/dist/chart/bar.js | 1 + .../resources/build/dist/chart/line.js | 1 + .../resources/build/dist/echarts.js | 11 +++ .../resources/cosbench.css | 15 ++++ 9 files changed, 272 insertions(+) create mode 100644 dev/cosbench-controller-web/WEB-INF/freemarker/finalchart.ftl create mode 100644 dev/cosbench-controller-web/WEB-INF/freemarker/forchart.ftl create mode 100644 dev/cosbench-controller-web/WEB-INF/freemarker/runningchart.ftl create mode 100644 dev/cosbench-controller-web/resources/build/dist/chart/bar.js create mode 100644 dev/cosbench-controller-web/resources/build/dist/chart/line.js create mode 100644 dev/cosbench-controller-web/resources/build/dist/echarts.js diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/finalchart.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/finalchart.ftl new file mode 100644 index 00000000..cbbb79b5 --- /dev/null +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/finalchart.ftl @@ -0,0 +1,68 @@ + \ No newline at end of file diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/forchart.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/forchart.ftl new file mode 100644 index 00000000..0f8be46c --- /dev/null +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/forchart.ftl @@ -0,0 +1,77 @@ + + \ No newline at end of file diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/runningchart.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/runningchart.ftl new file mode 100644 index 00000000..62ee12eb --- /dev/null +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/runningchart.ftl @@ -0,0 +1,61 @@ + \ No newline at end of file diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl index 006745a2..95c6cc61 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl @@ -10,6 +10,7 @@ + Workload Details @@ -89,6 +90,24 @@

Final Result

<#assign allMetrics = info.report.allMetrics > <#include "metrics.ftl"> +

Performance Graph + +

+ <#if perfDetails >

hide peformance details

<#else> @@ -99,6 +118,17 @@ <#assign snapshot = info.snapshot > <#assign allMetrics = snapshot.report.allMetrics > <#include "metrics.ftl"> +

Performance Graph

+
+
+
+
+
+
+ <#include "forchart.ftl"> + <#include "runningchart.ftl"> + +

The snapshot was taken at ${snapshot.timestamp?time} with version ${snapshot.version}.

Stages

diff --git a/dev/cosbench-controller-web/WEB-INF/web.xml b/dev/cosbench-controller-web/WEB-INF/web.xml index cc58f131..da8b383d 100644 --- a/dev/cosbench-controller-web/WEB-INF/web.xml +++ b/dev/cosbench-controller-web/WEB-INF/web.xml @@ -71,6 +71,10 @@ resource *.css + + resource + *.js + resource *.png @@ -101,6 +105,10 @@ css text/css + + js + text/javascript + png image/png diff --git a/dev/cosbench-controller-web/resources/build/dist/chart/bar.js b/dev/cosbench-controller-web/resources/build/dist/chart/bar.js new file mode 100644 index 00000000..5925f3fc --- /dev/null +++ b/dev/cosbench-controller-web/resources/build/dist/chart/bar.js @@ -0,0 +1 @@ +define("echarts/chart/bar",["require","../component/base","./base","zrender/shape/Rectangle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,a,o,r){i.call(this,e,t,a,o,r),n.call(this),this.refresh(o)}var i=e("../component/base"),n=e("./base"),a=e("zrender/shape/Rectangle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var o=e("../config"),r=e("../util/ecData"),s=e("zrender/tool/util"),l=e("zrender/tool/color");return t.prototype={type:o.CHART_TYPE_BAR,_buildShape:function(){this._bulidPosition()},_buildNormal:function(e,t,i,n,o){for(var r,s,l,h,d,m,c,p,u,V,U,y,g=this.series,f=i[0][0],b=g[f],_=b.xAxisIndex,x=b.yAxisIndex,k="horizontal"==o?this.component.xAxis.getAxis(_):this.component.yAxis.getAxis(x),L=this._mapSize(k,i),v=L.gap,W=L.barGap,w=L.barWidthMap,X=L.barMaxWidthMap,I=L.barWidth,K=L.barMinHeightMap,S=L.interval,T=0,C=t;C>T&&null!=k.getNameByIndex(T);T++){"horizontal"==o?h=k.getCoordByIndex(T)-v/2:d=k.getCoordByIndex(T)+v/2;for(var E=0,A=i.length;A>E;E++){x=g[i[E][0]].yAxisIndex||0,_=g[i[E][0]].xAxisIndex||0,r="horizontal"==o?this.component.yAxis.getAxis(x):this.component.xAxis.getAxis(_),c=m=u=p=r.getCoord(0);for(var z=0,M=i[E].length;M>z;z++)if(f=i[E][z],b=g[f],U=b.data[T],y=null!=U?null!=U.value?U.value:U:"-",n[f]=n[f]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==y){y>0?(s=z>0?r.getCoordSize(y):"horizontal"==o?c-r.getCoord(y):r.getCoord(y)-c,1===M&&K[f]>s&&(s=K[f]),"horizontal"==o?(m-=s,d=m):(h=m,m+=s)):0>y?(s=z>0?r.getCoordSize(y):"horizontal"==o?r.getCoord(y)-u:u-r.getCoord(y),1===M&&K[f]>s&&(s=K[f]),"horizontal"==o?(d=p,p+=s):(p-=s,h=p)):(s=0,"horizontal"==o?(m-=s,d=m):(h=m,m+=s));var l=Math.min(X[f]||Number.MAX_VALUE,w[f]||I);n[f][T]="horizontal"==o?h+l/2:d-l/2,n[f].min>y&&(n[f].min=y,"horizontal"==o?(n[f].minY=d,n[f].minX=n[f][T]):(n[f].minX=h+s,n[f].minY=n[f][T])),n[f].maxz;z++)f=i[E][z],b=g[f],U=b.data[T],y=null!=U?null!=U.value?U.value:U:"-","-"==y&&this.deepQuery([U,b,this.option],"calculable")&&("horizontal"==o?(m-=this.ecTheme.island.r,d=m):(h=m,m+=this.ecTheme.island.r),l=Math.min(X[f]||Number.MAX_VALUE,w[f]||I),V=this._getBarItem(f,T,k.getNameByIndex(T),h+.5,d+.5-("horizontal"==o?0:l),("horizontal"==o?l:this.ecTheme.island.r)-1,("horizontal"==o?this.ecTheme.island.r:l)-1,"horizontal"==o?"vertical":"horizontal"),V.hoverable=!1,V.draggable=!1,V.style.lineWidth=1,V.style.brushType="stroke",V.style.strokeColor=b.calculableHolderColor||this.ecTheme.calculableHolderColor,this.shapeList.push(new a(V)));"horizontal"==o?h+=l+W:d-=l+W}}this._calculMarkMapXY(n,i,"horizontal"==o?"y":"x")},_buildHorizontal:function(e,t,i,n){return this._buildNormal(e,t,i,n,"horizontal")},_buildVertical:function(e,t,i,n){return this._buildNormal(e,t,i,n,"vertical")},_buildOther:function(e,t,i,n){for(var o=this.series,r=0,s=i.length;s>r;r++)for(var l=0,h=i[r].length;h>l;l++){var d=i[r][l],m=o[d],c=m.xAxisIndex||0,p=this.component.xAxis.getAxis(c),u=p.getCoord(0),V=m.yAxisIndex||0,U=this.component.yAxis.getAxis(V),y=U.getCoord(0);n[d]=n[d]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var g=0,f=m.data.length;f>g;g++){var b=m.data[g],_=null!=b?null!=b.value?b.value:b:"-";if(_ instanceof Array){var x,k,L=p.getCoord(_[0]),v=U.getCoord(_[1]),W=[b,m],w=this.deepQuery(W,"barWidth")||10,X=this.deepQuery(W,"barHeight");null!=X?(x="horizontal",_[0]>0?(w=L-u,L-=w):w=_[0]<0?u-L:0,k=this._getBarItem(d,g,_[0],L,v-X/2,w,X,x)):(x="vertical",_[1]>0?X=y-v:_[1]<0?(X=v-y,v-=X):X=0,k=this._getBarItem(d,g,_[0],L-w/2,v,w,X,x)),this.shapeList.push(new a(k)),L=p.getCoord(_[0]),v=U.getCoord(_[1]),n[d].min0>_[0]&&(n[d].min0=_[0],n[d].minY0=v,n[d].minX0=L),n[d].max0<_[0]&&(n[d].max0=_[0],n[d].maxY0=v,n[d].maxX0=L),n[d].sum0+=_[0],n[d].counter0++,n[d].min1>_[1]&&(n[d].min1=_[1],n[d].minY1=v,n[d].minX1=L),n[d].max1<_[1]&&(n[d].max1=_[1],n[d].maxY1=v,n[d].maxX1=L),n[d].sum1+=_[1],n[d].counter1++}}}this._calculMarkMapXY(n,i,"xy")},_mapSize:function(e,t,i){var n,a,o=this._findSpecialBarSzie(t,i),r=o.barWidthMap,s=o.barMaxWidthMap,l=o.barMinHeightMap,h=o.sBarWidthCounter,d=o.sBarWidthTotal,m=o.barGap,c=o.barCategoryGap,p=1;if(t.length!=h){if(i)n=e.getGap(),m=0,a=Math.floor(n/t.length),0>=a&&(p=Math.floor(t.length/n),a=1);else if(n="string"==typeof c&&c.match(/%$/)?Math.floor(e.getGap()*(100-parseFloat(c))/100):e.getGap()-c,"string"==typeof m&&m.match(/%$/)?(m=parseFloat(m)/100,a=Math.floor((n-d)/((t.length-1)*m+t.length-h)),m=Math.floor(a*m)):(m=parseFloat(m),a=Math.floor((n-d-m*(t.length-1))/(t.length-h))),0>=a)return this._mapSize(e,t,!0)}else if(n=h>1?"string"==typeof c&&c.match(/%$/)?Math.floor(e.getGap()*(100-parseFloat(c))/100):e.getGap()-c:d,a=0,m=h>1?Math.floor((n-d)/(h-1)):0,0>m)return this._mapSize(e,t,!0);return this._recheckBarMaxWidth(t,r,s,l,n,a,m,p)},_findSpecialBarSzie:function(e,t){for(var i,n,a,o,r=this.series,s={},l={},h={},d=0,m=0,c=0,p=e.length;p>c;c++)for(var u={barWidth:!1,barMaxWidth:!1},V=0,U=e[c].length;U>V;V++){var y=e[c][V],g=r[y];if(!t){if(u.barWidth)s[y]=i;else if(i=this.query(g,"barWidth"),null!=i){s[y]=i,m+=i,d++,u.barWidth=!0;for(var f=0,b=V;b>f;f++){var _=e[c][f];s[_]=i}}if(u.barMaxWidth)l[y]=n;else if(n=this.query(g,"barMaxWidth"),null!=n){l[y]=n,u.barMaxWidth=!0;for(var f=0,b=V;b>f;f++){var _=e[c][f];l[_]=n}}}h[y]=this.query(g,"barMinHeight"),a=null!=a?a:this.query(g,"barGap"),o=null!=o?o:this.query(g,"barCategoryGap")}return{barWidthMap:s,barMaxWidthMap:l,barMinHeightMap:h,sBarWidth:i,sBarMaxWidth:n,sBarWidthCounter:d,sBarWidthTotal:m,barGap:a,barCategoryGap:o}},_recheckBarMaxWidth:function(e,t,i,n,a,o,r,s){for(var l=0,h=e.length;h>l;l++){var d=e[l][0];i[d]&&i[d]0&&d.style.height>f&&d.style.width>f?(d.style.y+=f/2,d.style.height-=f,d.style.x+=f/2,d.style.width-=f):d.style.brushType="fill",d.highlightStyle.textColor=d.highlightStyle.color,d=this.addLabel(d,c,p,i,h),"insideLeft"===d.style.textPosition||"insideRight"===d.style.textPosition||"insideTop"===d.style.textPosition||"insideBottom"===d.style.textPosition){var _=5;switch(d.style.textPosition){case"insideLeft":d.style.textX=d.style.x+_,d.style.textY=d.style.y+d.style.height/2,d.style.textAlign="left",d.style.textBaseline="middle";break;case"insideRight":d.style.textX=d.style.x+d.style.width-_,d.style.textY=d.style.y+d.style.height/2,d.style.textAlign="right",d.style.textBaseline="middle";break;case"insideTop":d.style.textX=d.style.x+d.style.width/2,d.style.textY=d.style.y+_/2,d.style.textAlign="center",d.style.textBaseline="top";break;case"insideBottom":d.style.textX=d.style.x+d.style.width/2,d.style.textY=d.style.y+d.style.height-_/2,d.style.textAlign="center",d.style.textBaseline="bottom"}d.style.textPosition="specific",d.style.textColor=d.style.textColor||"#fff"}return this.deepQuery([p,c,this.option],"calculable")&&(this.setCalculable(d),d.draggable=!0),r.pack(d,m[e],e,m[e].data[t],t,i),d},getMarkCoord:function(e,t){var i,n,a=this.series[e],o=this.xMarkMap[e],r=this.component.xAxis.getAxis(a.xAxisIndex),s=this.component.yAxis.getAxis(a.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)if(o.isHorizontal){i="string"==typeof t.xAxis&&r.getIndexByName?r.getIndexByName(t.xAxis):t.xAxis||0;var l=o[i];l=null!=l?l:"string"!=typeof t.xAxis&&r.getCoordByIndex?r.getCoordByIndex(t.xAxis||0):r.getCoord(t.xAxis||0),n=[l,s.getCoord(t.yAxis||0)]}else{i="string"==typeof t.yAxis&&s.getIndexByName?s.getIndexByName(t.yAxis):t.yAxis||0;var h=o[i];h=null!=h?h:"string"!=typeof t.yAxis&&s.getCoordByIndex?s.getCoordByIndex(t.yAxis||0):s.getCoord(t.yAxis||0),n=[r.getCoord(t.xAxis||0),h]}else{var d=null!=t.valueIndex?t.valueIndex:null!=o.maxX0?"1":"";n=[o[t.type+"X"+d],o[t.type+"Y"+d],o[t.type+"Line"+d],o[t.type+d]]}return n},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e){for(var t=this.series,i={},n=0,a=e.length;a>n;n++)i[e[n][0]]=e[n];for(var o,s,l,h,d,m,c,n=this.shapeList.length-1;n>=0;n--)if(m=r.get(this.shapeList[n],"seriesIndex"),i[m]&&!i[m][3]&&"rectangle"===this.shapeList[n].type){if(c=r.get(this.shapeList[n],"dataIndex"),d=t[m],i[m][2]&&c===d.data.length-1){this.zr.delShape(this.shapeList[n].id);continue}if(!i[m][2]&&0===c){this.zr.delShape(this.shapeList[n].id);continue}"horizontal"===this.shapeList[n]._orient?(h=this.component.yAxis.getAxis(d.yAxisIndex||0).getGap(),l=i[m][2]?-h:h,o=0):(s=this.component.xAxis.getAxis(d.xAxisIndex||0).getGap(),o=i[m][2]?s:-s,l=0),this.shapeList[n].position=[0,0],this.zr.animate(this.shapeList[n].id,"").when(500,{position:[o,l]}).start()}}},s.inherits(t,n),s.inherits(t,i),e("../chart").define("bar",t),t}); \ No newline at end of file diff --git a/dev/cosbench-controller-web/resources/build/dist/chart/line.js b/dev/cosbench-controller-web/resources/build/dist/chart/line.js new file mode 100644 index 00000000..da2a590a --- /dev/null +++ b/dev/cosbench-controller-web/resources/build/dist/chart/line.js @@ -0,0 +1 @@ +define("echarts/chart/line",["require","../component/base","./base","zrender/shape/BrokenLine","../util/shape/Icon","../util/shape/HalfSmoothPolygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,i,o,r){n.call(this,e,t,i,o,r),a.call(this),this.refresh(o)}function i(e,t,i){var n=t.x,a=t.y,o=t.width,s=t.height,l=s/2;t.symbol.match("empty")&&(e.fillStyle="#fff"),t.brushType="both";var h=t.symbol.replace("empty","").toLowerCase();h.match("star")?(l=h.replace("star","")-0||5,a-=1,h="star"):("rectangle"===h||"arrow"===h)&&(n+=(o-s)/2,o=s);var d="";if(h.match("image")&&(d=h.replace(new RegExp("^image:\\/\\/"),""),h="image",n+=Math.round((o-s)/2)-1,o=s+=2),h=r.prototype.iconLibrary[h]){var m=t.x,c=t.y;e.moveTo(m,c+l),e.lineTo(m+5,c+l),e.moveTo(m+t.width-5,c+l),e.lineTo(m+t.width,c+l);var p=this;h(e,{x:n+4,y:a+4,width:o-8,height:s-8,n:l,image:d},function(){p.modSelf(),i()})}else e.moveTo(n,a+l),e.lineTo(n+o,a+l)}var n=e("../component/base"),a=e("./base"),o=e("zrender/shape/BrokenLine"),r=e("../util/shape/Icon"),s=e("../util/shape/HalfSmoothPolygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var l=e("../config"),h=e("../util/ecData"),d=e("zrender/tool/util"),m=e("zrender/tool/color");return t.prototype={type:l.CHART_TYPE_LINE,_buildShape:function(){this.finalPLMap={},this._bulidPosition()},_buildHorizontal:function(e,t,i,n){for(var a,o,r,s,l,h,d,m,c,p,u=this.series,V=i[0][0],U=u[V],y=U.xAxisIndex,g=this.component.xAxis.getAxis(y),f={},b=0,_=t;_>b&&null!=g.getNameByIndex(b);b++){r=g.getCoordByIndex(b);for(var x=0,k=i.length;k>x;x++){a=u[i[x][0]].yAxisIndex||0,o=this.component.yAxis.getAxis(a),h=l=m=d=o.getCoord(0);for(var L=0,v=i[x].length;v>L;L++)V=i[x][L],U=u[V],c=U.data[b],p=null!=c?null!=c.value?c.value:c:"-",f[V]=f[V]||[],n[V]=n[V]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==p?(p>=0?(l-=L>0?o.getCoordSize(p):h-o.getCoord(p),s=l):0>p&&(d+=L>0?o.getCoordSize(p):o.getCoord(p)-m,s=d),f[V].push([r,s,b,g.getNameByIndex(b),r,h]),n[V].min>p&&(n[V].min=p,n[V].minY=s,n[V].minX=r),n[V].max0&&(this.finalPLMap[V]=this.finalPLMap[V]||[],this.finalPLMap[V].push(f[V]),f[V]=[])}l=this.component.grid.getY();for(var W,x=0,k=i.length;k>x;x++)for(var L=0,v=i[x].length;v>L;L++)V=i[x][L],U=u[V],c=U.data[b],p=null!=c?null!=c.value?c.value:c:"-","-"==p&&this.deepQuery([c,U,this.option],"calculable")&&(W=this.deepQuery([c,U],"symbolSize"),l+=2*W+5,s=l,this.shapeList.push(this._getCalculableItem(V,b,g.getNameByIndex(b),r,s,"horizontal")))}for(var w in f)f[w].length>0&&(this.finalPLMap[w]=this.finalPLMap[w]||[],this.finalPLMap[w].push(f[w]),f[w]=[]);this._calculMarkMapXY(n,i,"y"),this._buildBorkenLine(e,this.finalPLMap,g,"horizontal")},_buildVertical:function(e,t,i,n){for(var a,o,r,s,l,h,d,m,c,p,u=this.series,V=i[0][0],U=u[V],y=U.yAxisIndex,g=this.component.yAxis.getAxis(y),f={},b=0,_=t;_>b&&null!=g.getNameByIndex(b);b++){s=g.getCoordByIndex(b);for(var x=0,k=i.length;k>x;x++){a=u[i[x][0]].xAxisIndex||0,o=this.component.xAxis.getAxis(a),h=l=m=d=o.getCoord(0);for(var L=0,v=i[x].length;v>L;L++)V=i[x][L],U=u[V],c=U.data[b],p=null!=c?null!=c.value?c.value:c:"-",f[V]=f[V]||[],n[V]=n[V]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==p?(p>=0?(l+=L>0?o.getCoordSize(p):o.getCoord(p)-h,r=l):0>p&&(d-=L>0?o.getCoordSize(p):m-o.getCoord(p),r=d),f[V].push([r,s,b,g.getNameByIndex(b),h,s]),n[V].min>p&&(n[V].min=p,n[V].minX=r,n[V].minY=s),n[V].max0&&(this.finalPLMap[V]=this.finalPLMap[V]||[],this.finalPLMap[V].push(f[V]),f[V]=[])}l=this.component.grid.getXend();for(var W,x=0,k=i.length;k>x;x++)for(var L=0,v=i[x].length;v>L;L++)V=i[x][L],U=u[V],c=U.data[b],p=null!=c?null!=c.value?c.value:c:"-","-"==p&&this.deepQuery([c,U,this.option],"calculable")&&(W=this.deepQuery([c,U],"symbolSize"),l-=2*W+5,r=l,this.shapeList.push(this._getCalculableItem(V,b,g.getNameByIndex(b),r,s,"vertical")))}for(var w in f)f[w].length>0&&(this.finalPLMap[w]=this.finalPLMap[w]||[],this.finalPLMap[w].push(f[w]),f[w]=[]);this._calculMarkMapXY(n,i,"x"),this._buildBorkenLine(e,this.finalPLMap,g,"vertical")},_buildOther:function(e,t,i,n){for(var a,o,r=this.series,s={},l=0,h=i.length;h>l;l++)for(var d=0,m=i[l].length;m>d;d++){var c=i[l][d],p=r[c],u=p.xAxisIndex||0;a=this.component.xAxis.getAxis(u);var V=p.yAxisIndex||0;o=this.component.yAxis.getAxis(V);var U=o.getCoord(0);s[c]=s[c]||[],n[c]=n[c]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var y=0,g=p.data.length;g>y;y++){var f=p.data[y],b=null!=f?null!=f.value?f.value:f:"-";if(b instanceof Array){var _=a.getCoord(b[0]),x=o.getCoord(b[1]);s[c].push([_,x,y,b[0],_,U]),n[c].min0>b[0]&&(n[c].min0=b[0],n[c].minY0=x,n[c].minX0=_),n[c].max0b[1]&&(n[c].min1=b[1],n[c].minY1=x,n[c].minX1=_),n[c].max10&&(this.finalPLMap[k]=this.finalPLMap[k]||[],this.finalPLMap[k].push(s[k]),s[k]=[]);this._calculMarkMapXY(n,i,"xy"),this._buildBorkenLine(e,this.finalPLMap,a,"other")},_buildBorkenLine:function(e,t,i,n){for(var a,r="other"==n?"horizontal":n,l=this.series,c=e.length-1;c>=0;c--){var p=e[c],u=l[p],V=t[p];if(u.type===this.type&&null!=V)for(var U=this._getBbox(p,r),y=this._sIndex2ColorMap[p],g=this.query(u,"itemStyle.normal.lineStyle.width"),f=this.query(u,"itemStyle.normal.lineStyle.type"),b=this.query(u,"itemStyle.normal.lineStyle.color"),_=this.getItemStyleColor(this.query(u,"itemStyle.normal.color"),p,-1),x=null!=this.query(u,"itemStyle.normal.areaStyle"),k=this.query(u,"itemStyle.normal.areaStyle.color"),L=0,v=V.length;v>L;L++){var W=V[L],w="other"!=n&&this._isLarge(r,W);if(w)W=this._getLargePointList(r,W);else for(var X=0,I=W.length;I>X;X++)a=u.data[W[X][2]],(this.deepQuery([a,u,this.option],"calculable")||this.deepQuery([a,u],"showAllSymbol")||"categoryAxis"===i.type&&i.isMainAxis(W[X][2])&&"none"!=this.deepQuery([a,u],"symbol"))&&this.shapeList.push(this._getSymbol(p,W[X][2],W[X][3],W[X][0],W[X][1],r));var K=new o({zlevel:this._zlevelBase,style:{miterLimit:g,pointList:W,strokeColor:b||_||y,lineWidth:g,lineType:f,smooth:this._getSmooth(u.smooth),smoothConstraint:U,shadowColor:this.query(u,"itemStyle.normal.lineStyle.shadowColor"),shadowBlur:this.query(u,"itemStyle.normal.lineStyle.shadowBlur"),shadowOffsetX:this.query(u,"itemStyle.normal.lineStyle.shadowOffsetX"),shadowOffsetY:this.query(u,"itemStyle.normal.lineStyle.shadowOffsetY")},hoverable:!1,_main:!0,_seriesIndex:p,_orient:r});if(h.pack(K,l[p],p,0,L,l[p].name),this.shapeList.push(K),x){var S=new s({zlevel:this._zlevelBase,style:{miterLimit:g,pointList:d.clone(W).concat([[W[W.length-1][4],W[W.length-1][5]],[W[0][4],W[0][5]]]),brushType:"fill",smooth:this._getSmooth(u.smooth),smoothConstraint:U,color:k?k:m.alpha(y,.5)},highlightStyle:{brushType:"fill"},hoverable:!1,_main:!0,_seriesIndex:p,_orient:r});h.pack(S,l[p],p,0,L,l[p].name),this.shapeList.push(S)}}}},_getBbox:function(e,t){var i=this.component.grid.getBbox(),n=this.xMarkMap[e];return null!=n.minX0?[[Math.min(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.min(n.minY0,n.maxY0,n.minY1,n.maxY1)],[Math.max(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.max(n.minY0,n.maxY0,n.minY1,n.maxY1)]]:("horizontal"===t?(i[0][1]=Math.min(n.minY,n.maxY),i[1][1]=Math.max(n.minY,n.maxY)):(i[0][0]=Math.min(n.minX,n.maxX),i[1][0]=Math.max(n.minX,n.maxX)),i)},_isLarge:function(e,t){return t.length<2?!1:"horizontal"===e?Math.abs(t[0][0]-t[1][0])<.5:Math.abs(t[0][1]-t[1][1])<.5},_getLargePointList:function(e,t){var i;i="horizontal"===e?this.component.grid.getWidth():this.component.grid.getHeight();for(var n=t.length,a=[],o=0;i>o;o++)a[o]=t[Math.floor(n/i*o)];return a},_getSmooth:function(e){return e?.3:0},_getCalculableItem:function(e,t,i,n,a,o){var r=this.series,s=r[e].calculableHolderColor||this.ecTheme.calculableHolderColor,l=this._getSymbol(e,t,i,n,a,o);return l.style.color=s,l.style.strokeColor=s,l.rotation=[0,0],l.hoverable=!1,l.draggable=!1,l.style.text=void 0,l},_getSymbol:function(e,t,i,n,a,o){var r=this.series,s=r[e],l=s.data[t],h=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],this._sIndex2ColorMap[e],"#fff","vertical"===o?"horizontal":"vertical");return h.zlevel=this._zlevelBase+1,this.deepQuery([l,s,this.option],"calculable")&&(this.setCalculable(h),h.draggable=!0),h},getMarkCoord:function(e,t){var i=this.series[e],n=this.xMarkMap[e],a=this.component.xAxis.getAxis(i.xAxisIndex),o=this.component.yAxis.getAxis(i.yAxisIndex);if(t.type&&("max"===t.type||"min"===t.type||"average"===t.type)){var r=null!=t.valueIndex?t.valueIndex:null!=n.maxX0?"1":"";return[n[t.type+"X"+r],n[t.type+"Y"+r],n[t.type+"Line"+r],n[t.type+r]]}return["string"!=typeof t.xAxis&&a.getCoordByIndex?a.getCoordByIndex(t.xAxis||0):a.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&o.getCoordByIndex?o.getCoordByIndex(t.yAxis||0):o.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ontooltipHover:function(e,t){for(var i,n,a=e.seriesIndex,o=e.dataIndex,r=a.length;r--;)if(i=this.finalPLMap[a[r]])for(var s=0,l=i.length;l>s;s++){n=i[s];for(var h=0,d=n.length;d>h;h++)o===n[h][2]&&t.push(this._getSymbol(a[r],n[h][2],n[h][3],n[h][0],n[h][1],"horizontal"))}},addDataAnimation:function(e){for(var t=this.series,i={},n=0,a=e.length;a>n;n++)i[e[n][0]]=e[n];for(var o,r,s,l,h,d,m,n=this.shapeList.length-1;n>=0;n--)if(h=this.shapeList[n]._seriesIndex,i[h]&&!i[h][3]){if(this.shapeList[n]._main&&this.shapeList[n].style.pointList.length>1){if(d=this.shapeList[n].style.pointList,r=Math.abs(d[0][0]-d[1][0]),l=Math.abs(d[0][1]-d[1][1]),m="horizontal"===this.shapeList[n]._orient,i[h][2]){if("half-smooth-polygon"===this.shapeList[n].type){var c=d.length;this.shapeList[n].style.pointList[c-3]=d[c-2],this.shapeList[n].style.pointList[c-3][m?0:1]=d[c-4][m?0:1],this.shapeList[n].style.pointList[c-2]=d[c-1]}this.shapeList[n].style.pointList.pop(),m?(o=r,s=0):(o=0,s=-l)}else{if(this.shapeList[n].style.pointList.shift(),"half-smooth-polygon"===this.shapeList[n].type){var p=this.shapeList[n].style.pointList.pop();m?p[0]=d[0][0]:p[1]=d[0][1],this.shapeList[n].style.pointList.push(p)}m?(o=-r,s=0):(o=0,s=l)}this.zr.modShape(this.shapeList[n].id,{style:{pointList:this.shapeList[n].style.pointList}},!0)}else{if(i[h][2]&&this.shapeList[n]._dataIndex===t[h].data.length-1){this.zr.delShape(this.shapeList[n].id);continue}if(!i[h][2]&&0===this.shapeList[n]._dataIndex){this.zr.delShape(this.shapeList[n].id);continue}}this.shapeList[n].position=[0,0],this.zr.animate(this.shapeList[n].id,"").when(500,{position:[o,s]}).start()}}},r.prototype.iconLibrary.legendLineIcon=i,d.inherits(t,a),d.inherits(t,n),e("../chart").define("line",t),t}),define("echarts/util/shape/HalfSmoothPolygon",["require","zrender/shape/Base","zrender/shape/util/smoothBezier","zrender/tool/util","zrender/shape/Polygon"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/smoothBezier"),a=e("zrender/tool/util");return t.prototype={type:"half-smooth-polygon",buildPath:function(t,i){var a=i.pointList;if(!(a.length<2))if(i.smooth){var o=n(a.slice(0,-2),i.smooth,!1,i.smoothConstraint);t.moveTo(a[0][0],a[0][1]);for(var r,s,l,h=a.length,d=0;h-3>d;d++)r=o[2*d],s=o[2*d+1],l=a[d+1],t.bezierCurveTo(r[0],r[1],s[0],s[1],l[0],l[1]);t.lineTo(a[h-2][0],a[h-2][1]),t.lineTo(a[h-1][0],a[h-1][1]),t.lineTo(a[0][0],a[0][1])}else e("zrender/shape/Polygon").prototype.buildPath(t,i)}},a.inherits(t,i),t}); \ No newline at end of file diff --git a/dev/cosbench-controller-web/resources/build/dist/echarts.js b/dev/cosbench-controller-web/resources/build/dist/echarts.js new file mode 100644 index 00000000..e3fd2378 --- /dev/null +++ b/dev/cosbench-controller-web/resources/build/dist/echarts.js @@ -0,0 +1,11 @@ +var define,require,esl;!function(e){function t(e,t){function n(e){0===e.indexOf(".")&&a.push(e)}var a=[];if("string"==typeof e?n(e):T(e,function(e){n(e)}),a.length>0)throw new Error("[REQUIRE_FATAL]Relative ID is not allowed in global require: "+a.join(", "));var o=G.waitSeconds;return o&&e instanceof Array&&(E&&clearTimeout(E),E=setTimeout(i,1e3*o)),P(e,t)}function i(){function e(r,s){if(!o[r]&&!d(r,O)){o[r]=1,d(r,F)||n[r]||(n[r]=1,t.push(r));var l=A[r];l?s&&(n[r]||(n[r]=1,t.push(r)),T(l.depMs,function(t){e(t.absId,t.hard)})):a[r]||(a[r]=1,i.push(r))}}var t=[],i=[],n={},a={},o={};for(var r in z)e(r,1);if(t.length||i.length)throw new Error("[MODULE_TIMEOUT]Hang( "+(t.join(", ")||"none")+" ) Miss( "+(i.join(", ")||"none")+" )")}function n(e,t,i){if(null==i&&(null==t?(i=e,e=null):(i=t,t=null,e instanceof Array&&(t=e,e=null))),null!=i){var n=window.opera;if(!e&&document.attachEvent&&(!n||"[object Opera]"!==n.toString())){var a=I();e=a&&a.getAttribute("data-require-id")}e?(o(e,t,i),D&&clearTimeout(D)):B[0]={deps:t,factory:i}}}function a(){var e=G.config[this.id];return e&&"object"==typeof e?e:{}}function o(e,t,i){A[e]||(A[e]={id:e,depsDec:t,deps:t||["require","exports","module"],factoryDeps:[],factory:i,exports:{},config:a,state:M,require:L(e),depMs:[],depMkv:{},depRs:[],depPMs:[]})}function r(e){var t=A[e];if(t&&!d(e,J)){var i=t.deps,n=t.factory,a=0;"function"==typeof n&&(a=Math.min(n.length,i.length),!t.depsDec&&n.toString().replace(/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/gm,"").replace(/require\(\s*(['"'])([^'"]+)\1\s*\)/g,function(e,t,n){i.push(n)}));var o=[];T(i,function(i,n){var r,s,l=w(i),h=v(l.mod,e);h&&!H[h]?(l.res&&(s={id:i,mod:h,res:l.res},z[h]=1,t.depPMs.push(h),t.depRs.push(s)),r=t.depMkv[h],r||(r={id:l.mod,absId:h,hard:a>n},t.depMs.push(r),t.depMkv[h]=r,o.push(h))):r={absId:h},a>n&&t.factoryDeps.push(s||r)}),t.state=J,h(e),y(o)}}function s(){for(var e in z)l(e),m(e)}function l(e){function t(e){if(!d(e,J))return!1;if(d(e,F)||i[e])return!0;i[e]=1;var n=A[e],a=!0;return T(n.depMs,function(e){return a=t(e.absId)}),a&&T(n.depRs,function(e){return a=!(!e.absId||!d(e.absId,O))}),a&&(n.state=F),a}var i={};t(e)}function h(t){function i(){if(!n&&a.state===F){n=1;var i=1,o=[];if(T(a.factoryDeps,function(e){var t=e.absId;return H[t]||(m(t),d(t,O))?void o.push(t):(i=0,!1)}),i){try{var r=c(o,{require:a.require,exports:a.exports,module:a}),s=a.factory,l="function"==typeof s?s.apply(e,r):s;null!=l&&(a.exports=l),a.invokeFactory=null,delete z[t]}catch(h){if(n=0,/^\[MODULE_MISS\]"([^"]+)/.test(h.message)){var p=a.depMkv[RegExp.$1];return void(p&&(p.hard=1))}throw h}u(t)}}}var n,a=A[t];a.invokeFactory=i,T(a.depPMs,function(e){p(e,function(){T(a.depRs,function(i){i.absId||i.mod!==e||(i.absId=v(i.id,t),y([i.absId],s))})})})}function d(e,t){return A[e]&&A[e].state>=t}function m(e){var t=A[e];t&&t.invokeFactory&&t.invokeFactory()}function c(e,t){var i=[];return T(e,function(e,n){i[n]=t[e]||V(e)}),i}function p(e,t){if(d(e,O))return void t();var i=N[e];i||(i=N[e]=[]),i.push(t)}function u(e){var t=N[e]||[],i=A[e];i.state=O;for(var n=t.length;n--;)t[n]();t.length=0,delete N[e]}function V(e){return d(e,O)?A[e].exports:null}function U(e){T(B,function(t){o(e,t.deps,t.factory)}),B.length=0,r(e)}function y(t,i,n,a){function o(){if(!l){var n=1;T(t,function(e){return H[e]?void 0:n=!!d(e,O)}),n&&(l=1,"function"==typeof i&&i.apply(e,c(t,H)))}}if("string"==typeof t){if(m(t),!d(t,O))throw new Error('[MODULE_MISS]"'+t+'" is not exists!');return V(t)}a=a||{};var l=0;t instanceof Array&&(o(),l||(T(t,function(e){H[e]||d(e,O)||(p(e,o),a[e]||(e.indexOf("!")>0?f:g)(e,n),r(e))}),s()))}function g(e){function t(){var t=i.readyState;if("undefined"==typeof t||/^(loaded|complete)$/.test(t)){i.onload=i.onreadystatechange=null,i=null,U(e);for(var n in z)r(n);s()}}if(!R[e]&&!A[e]){R[e]=1;var i=document.createElement("script");i.setAttribute("data-require-id",e),i.src=k(e+".js"),i.async=!0,i.readyState?i.onreadystatechange=t:i.onload=t,K(i)}}function f(e,t){function i(t){r.exports=t||!0,u(e)}function n(n){var r=t?A[t].require:P;n.load(o.res,r,i,a.call({id:e}))}if(!A[e]){var o=w(e),r={id:e,state:J};A[e]=r,i.fromText=function(e,t){z[e]=1,new Function(t)(),U(e)},n(V(o.mod))}}function b(e,t){var i=X(e,1,t);return i.sort(C),i}function _(){G.baseUrl=G.baseUrl.replace(/\/$/,"")+"/",Y=b(G.paths),q=b(G.map,1),T(q,function(e){e.v=b(e.v)}),Q=[],T(G.packages,function(e){var t=e;"string"==typeof e&&(t={name:e.split("/")[0],location:e,main:"main"}),t.location=t.location||t.name,t.main=(t.main||"main").replace(/\.js$/i,""),t.reg=S(t.name),Q.push(t)}),Q.sort(C),Z=b(G.urlArgs,1),j=b(G.noRequests),T(j,function(e){var t=e.v,i={};e.v=i,t instanceof Array||(t=[t]),T(t,function(e){i[e]=1})})}function x(e,t,i){T(t,function(t){return t.reg.test(e)?(i(t.v,t.k,t),!1):void 0})}function k(e){var t=/(\.[a-z0-9]+)$/i,i=/(\?[^#]*)$/,n="",a=e,o="";i.test(e)&&(o=RegExp.$1,e=e.replace(i,"")),t.test(e)&&(n=RegExp.$1,a=e.replace(t,""));var r,s=a;return x(a,Y,function(e,t){s=s.replace(t,e),r=1}),r||x(a,Q,function(e,t,i){s=s.replace(i.name,i.location)}),/^([a-z]{2,10}:\/)?\//i.test(s)||(s=G.baseUrl+s),s+=n+o,x(a,Z,function(e){s+=(s.indexOf("?")>0?"&":"?")+e}),s}function L(e){function t(t,n){if("string"==typeof t)return i[t]||(i[t]=y(v(t,e))),i[t];if(t instanceof Array){var a=[],o=[],r=[];T(t,function(t,i){var n=w(t),s=v(n.mod,e);o.push(s),z[s]=1,n.res?(a.push(s),r[i]=null):r[i]=s});var s={};T(o,function(e){var t;x(e,j,function(e){t=e}),t&&(t["*"]?s[e]=1:T(o,function(i){return t[i]?(s[e]=1,!1):void 0}))}),y(o,function(){T(r,function(i,n){null==i&&(r[n]=v(t[n],e))}),y(r,n,e)},e,s)}}var i={};return t.toUrl=function(t){return k(v(t,e))},t}function v(e,t){if(!e)return"";t=t||"";var i=w(e);if(!i)return e;var n=i.res,a=W(i.mod,t);if(T(Q,function(e){var t=e.name;return t===a?(a=t+"/"+e.main,!1):void 0}),x(t,q,function(e){x(a,e,function(e,t){a=a.replace(t,e)})}),n){var o=V(a);n=o.normalize?o.normalize(n,function(e){return v(e,t)}):v(n,t),a+="!"+n}return a}function W(e,t){if(0===e.indexOf(".")){var i=t.split("/"),n=e.split("/"),a=i.length-1,o=n.length,r=0,s=0;e:for(var l=0;o>l;l++){var h=n[l];switch(h){case"..":if(!(a>r))break e;r++,s++;break;case".":s++;break;default:break e}}return i.length=a-r,n=n.slice(s),i.concat(n).join("/")}return e}function w(e){var t=e.split("!");return t[0]?{mod:t[0],res:t[1]}:null}function X(e,t,i){var n=[];for(var a in e)if(e.hasOwnProperty(a)){var o={k:a,v:e[a]};n.push(o),t&&(o.reg="*"===a&&i?/^/:S(a))}return n}function I(){if($)return $;if(et&&"interactive"===et.readyState)return et;for(var e=document.getElementsByTagName("script"),t=e.length;t--;){var i=e[t];if("interactive"===i.readyState)return et=i,i}}function K(e){$=e,it?tt.insertBefore(e,it):tt.appendChild(e),$=null}function S(e){return new RegExp("^"+e+"(/|$)")}function T(e,t){if(e instanceof Array)for(var i=0,n=e.length;n>i&&t(e[i],i)!==!1;i++);}function C(e,t){var i=e.k||e.name,n=t.k||t.name;return"*"===n?-1:"*"===i?1:n.length-i.length}var E,A={},z={},M=1,J=2,F=3,O=4,P=L();t.version="1.8.6",t.loader="esl",t.toUrl=P.toUrl;var D;n.amd={};var N={},H={require:t,exports:1,module:1},B=[],R={},G={baseUrl:"./",paths:{},config:{},map:{},packages:[],waitSeconds:0,noRequests:{},urlArgs:{}};t.config=function(e){function t(e){a.push(e)}if(e){for(var i in G){var n=e[i],a=G[i];if(n)if("urlArgs"===i&&"string"==typeof n)G.urlArgs["*"]=n;else if(a instanceof Array)T(n,t);else if("object"==typeof a)for(var i in n)a[i]=n[i];else G[i]=n}_()}},_();var Y,Q,q,Z,j,$,et,tt=document.getElementsByTagName("head")[0],it=document.getElementsByTagName("base")[0];it&&(tt=it.parentNode),e.define||(e.define=n,e.require||(e.require=t),e.esl=t)}(this),define("echarts",["echarts/echarts"],function(e){return e}),define("echarts/echarts",["require","./config","zrender/tool/util","zrender/tool/event","zrender/tool/env","zrender","zrender/config","./chart/island","./component/toolbox","./component","./component/title","./component/tooltip","./component/legend","./util/ecData","./chart","zrender/tool/color","./component/timeline","zrender/shape/Image","zrender/loadingEffect/Bar","zrender/loadingEffect/Bubble","zrender/loadingEffect/DynamicLine","zrender/loadingEffect/Ring","zrender/loadingEffect/Spin","zrender/loadingEffect/Whirling","./theme/default"],function(e){function t(){r.Dispatcher.call(this)}function i(e){this._themeConfig=o.clone(a),this.dom=e,this._connected=!1,this._status={dragIn:!1,dragOut:!1,needRefresh:!1},this._curEventType=!1,this._chartList=[],this._messageCenter=new t,this._messageCenterOutSide=new t,this.resize=this.resize(),this._init()}function n(e,t,i,n,a){for(var o=e._chartList,r=o.length;r--;){var s=o[r];"function"==typeof s[t]&&s[t](i,n,a)}}var a=e("./config"),o=e("zrender/tool/util"),r=e("zrender/tool/event"),s={},l=e("zrender/tool/env").canvasSupported,h=new Date-0,d={},m="_echarts_instance_";s.version="2.1.10",s.dependencies={zrender:"2.0.6"},s.init=function(t,n){var a=e("zrender");(a.version||"1.0.3").replace(".","")-0r;r++){var l=p[r],h=c[l];o[h]="_on"+l.toLowerCase(),i.on(h,this._onzrevent)}this.chart={},this.component={};var d=e("./chart/island");this._island=new d(this._themeConfig,this._messageCenter,i,{},this),this.chart.island=this._island;var m=e("./component/toolbox");this._toolbox=new m(this._themeConfig,this._messageCenter,i,{},this),this.component.toolbox=this._toolbox;var u=e("./component");u.define("title",e("./component/title")),u.define("tooltip",e("./component/tooltip")),u.define("legend",e("./component/legend")),(0===i.getWidth()||0===i.getHeight())&&console.error("Dom’s width & height should be ready before init.")},__onevent:function(e){e.__echartsId=e.__echartsId||this.id;var t=e.__echartsId===this.id;switch(this._curEventType||(this._curEventType=e.type),e.type){case a.EVENT.LEGEND_SELECTED:this._onlegendSelected(e);break;case a.EVENT.DATA_ZOOM:if(!t){var i=this.component.dataZoom;i&&(i.silence(!0),i.absoluteZoom(e.zoom),i.silence(!1))}this._ondataZoom(e);break;case a.EVENT.DATA_RANGE:t&&this._ondataRange(e);break;case a.EVENT.MAGIC_TYPE_CHANGED:if(!t){var n=this.component.toolbox;n&&(n.silence(!0),n.setMagicType(e.magicType),n.silence(!1))}this._onmagicTypeChanged(e);break;case a.EVENT.DATA_VIEW_CHANGED:t&&this._ondataViewChanged(e);break;case a.EVENT.TOOLTIP_HOVER:t&&this._tooltipHover(e);break;case a.EVENT.RESTORE:this._onrestore();break;case a.EVENT.REFRESH:t&&this._onrefresh(e);break;case a.EVENT.TOOLTIP_IN_GRID:case a.EVENT.TOOLTIP_OUT_GRID:if(t){if(this._connected){var o=this.component.grid;o&&(e.x=(e.event.zrenderX-o.getX())/o.getWidth(),e.y=(e.event.zrenderY-o.getY())/o.getHeight())}}else{var o=this.component.grid;o&&this._zr.trigger("mousemove",{connectTrigger:!0,zrenderX:o.getX()+e.x*o.getWidth(),zrenderY:o.getY()+e.y*o.getHeight()})}}if(this._connected&&t&&this._curEventType===e.type){for(var r in this._connected)this._connected[r].connectedEventHandler(e);this._curEventType=null}(!t||!this._connected&&t)&&(this._curEventType=null)},_onclick:function(e){if(n(this,"onclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.CLICK,e.event,t,this)}},_ondblclick:function(e){if(n(this,"ondblclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.DBLCLICK,e.event,t,this)}},_onmouseover:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.HOVER,e.event,t,this)}},_onmouseout:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.MOUSEOUT,e.event,t,this)}},_ondragstart:function(e){this._status={dragIn:!1,dragOut:!1,needRefresh:!1},n(this,"ondragstart",e)},_ondragenter:function(e){n(this,"ondragenter",e)},_ondragover:function(e){n(this,"ondragover",e)},_ondragleave:function(e){n(this,"ondragleave",e)},_ondrop:function(e){n(this,"ondrop",e,this._status),this._island.ondrop(e,this._status)},_ondragend:function(e){if(n(this,"ondragend",e,this._status),this._timeline&&this._timeline.ondragend(e,this._status),this._island.ondragend(e,this._status),this._status.needRefresh){this._syncBackupData(this._option);var t=this._messageCenter;t.dispatch(a.EVENT.DATA_CHANGED,e.event,this._eventPackage(e.target),this),t.dispatch(a.EVENT.REFRESH,null,null,this)}},_onlegendSelected:function(e){this._status.needRefresh=!1,n(this,"onlegendSelected",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataZoom:function(e){this._status.needRefresh=!1,n(this,"ondataZoom",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataRange:function(e){this._clearEffect(),this._status.needRefresh=!1,n(this,"ondataRange",e,this._status),this._status.needRefresh&&this._zr.refresh()},_onmagicTypeChanged:function(){this._clearEffect(),this._render(this._toolbox.getMagicOption())},_ondataViewChanged:function(e){this._syncBackupData(e.option),this._messageCenter.dispatch(a.EVENT.DATA_CHANGED,null,e,this),this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_tooltipHover:function(e){var t=[];n(this,"ontooltipHover",e,t)},_onrestore:function(){this.restore()},_onrefresh:function(e){this._refreshInside=!0,this.refresh(e),this._refreshInside=!1},_syncBackupData:function(e){this.component.dataZoom&&this.component.dataZoom.syncBackupData(e)},_eventPackage:function(t){if(t){var i=e("./util/ecData"),n=i.get(t,"seriesIndex"),a=i.get(t,"dataIndex");return a=-1!=n&&this.component.dataZoom?this.component.dataZoom.getRealDataIndex(n,a):a,{seriesIndex:n,seriesName:(i.get(t,"series")||{}).name,dataIndex:a,data:i.get(t,"data"),name:i.get(t,"name"),value:i.get(t,"value"),special:i.get(t,"special")}}},_render:function(t){this._mergeGlobalConifg(t);var i=t.backgroundColor;if(i)if(l||-1==i.indexOf("rgba"))this.dom.style.backgroundColor=i;else{var n=i.split(",");this.dom.style.filter="alpha(opacity="+100*n[3].substring(0,n[3].lastIndexOf(")"))+")",n.length=3,n[0]=n[0].replace("a",""),this.dom.style.backgroundColor=n.join(",")+")"}this._zr.clearAnimation(),this._chartList=[];var o=e("./chart"),r=e("./component");(t.xAxis||t.yAxis)&&(t.grid=t.grid||{},t.dataZoom=t.dataZoom||{});for(var s,h,d,m=["title","legend","tooltip","dataRange","roamController","grid","dataZoom","xAxis","yAxis","polar"],c=0,p=m.length;p>c;c++)h=m[c],d=this.component[h],t[h]?(d?d.refresh&&d.refresh(t):(s=r.get(/^[xy]Axis$/.test(h)?"axis":h),d=new s(this._themeConfig,this._messageCenter,this._zr,t,this,h),this.component[h]=d),this._chartList.push(d)):d&&(d.dispose(),this.component[h]=null,delete this.component[h]);for(var u,V,U,y={},c=0,p=t.series.length;p>c;c++)V=t.series[c].type,V?y[V]||(y[V]=!0,u=o.get(V),u?(this.chart[V]?(U=this.chart[V],U.refresh(t)):U=new u(this._themeConfig,this._messageCenter,this._zr,t,this),this._chartList.push(U),this.chart[V]=U):console.error(V+" has not been required.")):console.error("series["+c+"] chart type has not been defined.");for(V in this.chart)V==a.CHART_TYPE_ISLAND||y[V]||(this.chart[V].dispose(),this.chart[V]=null,delete this.chart[V]);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._island.refresh(t),this._toolbox.refresh(t),t.animation&&!t.renderAsImage?this._zr.refresh():this._zr.render();var g="IMG"+this.id,f=document.getElementById(g);t.renderAsImage&&l?(f?f.src=this.getDataURL(t.renderAsImage):(f=this.getImage(t.renderAsImage),f.id=g,f.style.position="absolute",f.style.left=0,f.style.top=0,this.dom.firstChild.appendChild(f)),this.un(),this._zr.un(),this._disposeChartList(),this._zr.clear()):f&&f.parentNode.removeChild(f),f=null,this._option=t},restore:function(){this._clearEffect(),this._option=o.clone(this._optionRestore),this._disposeChartList(),this._island.clear(),this._toolbox.reset(this._option,!0),this._render(this._option)},refresh:function(e){this._clearEffect(),e=e||{};var t=e.option;!this._refreshInside&&t&&(t=this.getOption(),o.merge(t,e.option,!0),o.merge(this._optionRestore,e.option,!0),this._toolbox.reset(t)),this._island.refresh(t),this._toolbox.refresh(t),this._zr.clearAnimation();for(var i=0,n=this._chartList.length;n>i;i++)this._chartList[i].refresh&&this._chartList[i].refresh(t);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._zr.refresh()},_disposeChartList:function(){this._clearEffect(),this._zr.clearAnimation();for(var e=this._chartList.length;e--;){var t=this._chartList[e];if(t){var i=t.type;this.chart[i]&&delete this.chart[i],this.component[i]&&delete this.component[i],t.dispose&&t.dispose()}}this._chartList=[]},_mergeGlobalConifg:function(t){for(var i=["backgroundColor","calculable","calculableColor","calculableHolderColor","nameConnector","valueConnector","animation","animationThreshold","animationDuration","animationEasing","addDataAnimation","symbolList","DRAG_ENABLE_TIME"],n=i.length;n--;){var a=i[n];null==t[a]&&(t[a]=this._themeConfig[a])}var o=t.color;o&&o.length||(o=this._themeConfig.color),l||(t.animation=!1,t.addDataAnimation=!1),this._zr.getColor=function(t){var i=e("zrender/tool/color");return i.getColor(t,o)}},setOption:function(e,t){return e.timeline?this._setTimelineOption(e):this._setOption(e,t)},_setOption:function(e,t){return this._option=!t&&this._option?o.merge(this.getOption(),o.clone(e),!0):o.clone(e),this._optionRestore=o.clone(this._option),this._option.series&&0!==this._option.series.length?(this.component.dataZoom&&(this._option.dataZoom||this._option.toolbox&&this._option.toolbox.feature&&this._option.toolbox.feature.dataZoom&&this._option.toolbox.feature.dataZoom.show)&&this.component.dataZoom.syncOption(this._option),this._toolbox.reset(this._option),this._render(this._option),this):void this._zr.clear()},getOption:function(){function e(e){var n=i._optionRestore[e];if(n)if(n instanceof Array)for(var a=n.length;a--;)t[e][a].data=o.clone(n[a].data);else t[e].data=o.clone(n.data)}var t=o.clone(this._option),i=this;return e("xAxis"),e("yAxis"),e("series"),t},setSeries:function(e,t){return t?(this._option.series=e,this.setOption(this._option,t)):this.setOption({series:e}),this},getSeries:function(){return this.getOption().series},_setTimelineOption:function(t){this._timeline&&this._timeline.dispose();var i=e("./component/timeline"),n=new i(this._themeConfig,this._messageCenter,this._zr,t,this);return this._timeline=n,this.component.timeline=this._timeline,this},addData:function(e,t,i,n,r){for(var s=e instanceof Array?e:[[e,t,i,n,r]],l=this.getOption(),h=this._optionRestore,d=0,m=s.length;m>d;d++){e=s[d][0],t=s[d][1],i=s[d][2],n=s[d][3],r=s[d][4];var c=h.series[e],p=i?"unshift":"push",u=i?"pop":"shift";if(c){var V=c.data,U=l.series[e].data;if(V[p](t),U[p](t),n||(V[u](),t=U[u]()),null!=r){var y,g;if(c.type===a.CHART_TYPE_PIE&&(y=h.legend)&&(g=y.data)){var f=l.legend.data;if(g[p](r),f[p](r),!n){var b=o.indexOf(g,t.name);-1!=b&&g.splice(b,1),b=o.indexOf(f,t.name),-1!=b&&f.splice(b,1)}}else if(null!=h.xAxis&&null!=h.yAxis){var _,x,k=c.xAxisIndex||0;(null==h.xAxis[k].type||"category"===h.xAxis[k].type)&&(_=h.xAxis[k].data,x=l.xAxis[k].data,_[p](r),x[p](r),n||(_[u](),x[u]())),k=c.yAxisIndex||0,"category"===h.yAxis[k].type&&(_=h.yAxis[k].data,x=l.yAxis[k].data,_[p](r),x[p](r),n||(_[u](),x[u]()))}}this._option.series[e].data=l.series[e].data}}this._zr.clearAnimation();for(var L=this._chartList,d=0,m=L.length;m>d;d++)l.addDataAnimation&&L[d].addDataAnimation&&L[d].addDataAnimation(s);this.component.dataZoom&&this.component.dataZoom.syncOption(l),this._option=l;var v=this;return setTimeout(function(){if(v._zr){v._zr.clearAnimation();for(var e=0,t=L.length;t>e;e++)L[e].motionlessOnce=l.addDataAnimation&&L[e].addDataAnimation;v._messageCenter.dispatch(a.EVENT.REFRESH,null,{option:l},v)}},l.addDataAnimation?500:0),this},addMarkPoint:function(e,t){return this._addMark(e,t,"markPoint")},addMarkLine:function(e,t){return this._addMark(e,t,"markLine")},_addMark:function(e,t,i){var n,a=this._option.series;if(a&&(n=a[e])){var r=this._optionRestore.series,s=r[e],l=n[i],h=s[i];l=n[i]=l||{data:[]},h=s[i]=h||{data:[]};for(var d in t)"data"===d?(l.data=l.data.concat(t.data),h.data=h.data.concat(t.data)):"object"!=typeof t[d]||null==l[d]?l[d]=h[d]=t[d]:(o.merge(l[d],t[d],!0),o.merge(h[d],t[d],!0));var m=this.chart[n.type];m&&m.addMark(e,t,i)}return this},delMarkPoint:function(e,t){return this._delMark(e,t,"markPoint")},delMarkLine:function(e,t){return this._delMark(e,t,"markLine")},_delMark:function(e,t,i){var n,a,o,r=this._option.series;if(!(r&&(n=r[e])&&(a=n[i])&&(o=a.data)))return this;t=t.split(" > ");for(var s=-1,l=0,h=o.length;h>l;l++){var d=o[l];if(d instanceof Array){if(d[0].name===t[0]&&d[1].name===t[1]){s=l;break}}else if(d.name===t[0]){s=l;break}}if(s>-1){o.splice(s,1),this._optionRestore.series[e][i].data.splice(s,1);var m=this.chart[n.type];m&&m.delMark(e,t.join(" > "),i)}return this},getDom:function(){return this.dom},getZrender:function(){return this._zr},getDataURL:function(e){if(!l)return"";if(0===this._chartList.length){var t="IMG"+this.id,i=document.getElementById(t);if(i)return i.src}var n=this.component.tooltip;switch(n&&n.hideTip(),e){case"jpeg":break;default:e="png"}var a=this._option.backgroundColor;return a&&"rgba(0,0,0,0)"===a.replace(" ","")&&(a="#fff"),this._zr.toDataURL("image/"+e,a)},getImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getDataURL(e),i.title=t&&t.text||"ECharts",i},getConnectedDataURL:function(t){if(!this.isConnected())return this.getDataURL(t);var i=this.dom,n={self:{img:this.getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight}},a=n.self.left,o=n.self.top,r=n.self.right,s=n.self.bottom;for(var l in this._connected)i=this._connected[l].getDom(),n[l]={img:this._connected[l].getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight},a=Math.min(a,n[l].left),o=Math.min(o,n[l].top),r=Math.max(r,n[l].right),s=Math.max(s,n[l].bottom);var h=document.createElement("div");h.style.position="absolute",h.style.left="-4000px",h.style.width=r-a+"px",h.style.height=s-o+"px",document.body.appendChild(h);var d=e("zrender").init(h),m=e("zrender/shape/Image");for(var l in n)d.addShape(new m({style:{x:n[l].left-a,y:n[l].top-o,image:n[l].img}}));d.render();var c=this._option.backgroundColor;c&&"rgba(0,0,0,0)"===c.replace(/ /g,"")&&(c="#fff");var p=d.toDataURL("image/png",c);return setTimeout(function(){d.dispose(),h.parentNode.removeChild(h),h=null},100),p},getConnectedImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getConnectedDataURL(e),i.title=t&&t.text||"ECharts",i},on:function(e,t){return this._messageCenterOutSide.bind(e,t,this),this},un:function(e,t){return this._messageCenterOutSide.unbind(e,t),this},connect:function(e){if(!e)return this;if(this._connected||(this._connected={}),e instanceof Array)for(var t=0,i=e.length;i>t;t++)this._connected[e[t].id]=e[t];else this._connected[e.id]=e;return this},disConnect:function(e){if(!e||!this._connected)return this;if(e instanceof Array)for(var t=0,i=e.length;i>t;t++)delete this._connected[e[t].id];else delete this._connected[e.id];for(var n in this._connected)return this;return this._connected=!1,this},connectedEventHandler:function(e){e.__echartsId!=this.id&&this._onevent(e)},isConnected:function(){return!!this._connected},showLoading:function(t){var i={bar:e("zrender/loadingEffect/Bar"),bubble:e("zrender/loadingEffect/Bubble"),dynamicLine:e("zrender/loadingEffect/DynamicLine"),ring:e("zrender/loadingEffect/Ring"),spin:e("zrender/loadingEffect/Spin"),whirling:e("zrender/loadingEffect/Whirling")};this._toolbox.hideDataView(),t=t||{};var n=t.textStyle||{};t.textStyle=n;var a=o.merge(o.clone(n),this._themeConfig.textStyle);n.textFont=a.fontStyle+" "+a.fontWeight+" "+a.fontSize+"px "+a.fontFamily,n.text=t.text||this._themeConfig.loadingText,null!=t.x&&(n.x=t.x),null!=t.y&&(n.y=t.y),t.effectOption=t.effectOption||{},t.effectOption.textStyle=n;var r=t.effect;return("string"==typeof r||null==r)&&(r=i[t.effect||"spin"]),this._zr.showLoading(new r(t.effectOption)),this},hideLoading:function(){return this._zr.hideLoading(),this},setTheme:function(t){if(t){if("string"==typeof t)switch(t){default:t=e("./theme/default")}else t=t||{};for(var i in this._themeConfig)delete this._themeConfig[i];for(var i in a)this._themeConfig[i]=o.clone(a[i]);t.color&&(this._themeConfig.color=[]),t.symbolList&&(this._themeConfig.symbolList=[]),o.merge(this._themeConfig,o.clone(t),!0)}l||(this._themeConfig.textStyle.fontFamily=this._themeConfig.textStyle.fontFamily2),this._timeline&&this._timeline.setTheme(!0),this._optionRestore&&this.restore()},resize:function(){var e=this;return function(){if(e._clearEffect(),e._zr.resize(),e._option&&e._option.renderAsImage&&l)return e._render(e._option),e;e._zr.clearAnimation(),e._island.resize(),e._toolbox.resize(),e._timeline&&e._timeline.resize();for(var t=0,i=e._chartList.length;i>t;t++)e._chartList[t].resize&&e._chartList[t].resize();return e.component.grid&&e.component.grid.refixAxisShape(e.component),e._zr.refresh(),e._messageCenter.dispatch(a.EVENT.RESIZE,null,null,e),e}},_clearEffect:function(){this._zr.modLayer(a.EFFECT_ZLEVEL,{motionBlur:!1}),this._zr.painter.clearLayer(a.EFFECT_ZLEVEL)},clear:function(){return this._disposeChartList(),this._zr.clear(),this._option={},this._optionRestore={},this.dom.style.backgroundColor=null,this},dispose:function(){var e=this.dom.getAttribute(m);e&&delete d[e],this._island.dispose(),this._toolbox.dispose(),this._timeline&&this._timeline.dispose(),this._messageCenter.unbind(),this.clear(),this._zr.dispose(),this._zr=null}},s}),define("echarts/config",[],function(){var e={CHART_TYPE_LINE:"line",CHART_TYPE_BAR:"bar",CHART_TYPE_SCATTER:"scatter",CHART_TYPE_PIE:"pie",CHART_TYPE_RADAR:"radar",CHART_TYPE_MAP:"map",CHART_TYPE_K:"k",CHART_TYPE_ISLAND:"island",CHART_TYPE_FORCE:"force",CHART_TYPE_CHORD:"chord",CHART_TYPE_GAUGE:"gauge",CHART_TYPE_FUNNEL:"funnel",CHART_TYPE_EVENTRIVER:"eventRiver",COMPONENT_TYPE_TITLE:"title",COMPONENT_TYPE_LEGEND:"legend",COMPONENT_TYPE_DATARANGE:"dataRange",COMPONENT_TYPE_DATAVIEW:"dataView",COMPONENT_TYPE_DATAZOOM:"dataZoom",COMPONENT_TYPE_TOOLBOX:"toolbox",COMPONENT_TYPE_TOOLTIP:"tooltip",COMPONENT_TYPE_GRID:"grid",COMPONENT_TYPE_AXIS:"axis",COMPONENT_TYPE_POLAR:"polar",COMPONENT_TYPE_X_AXIS:"xAxis",COMPONENT_TYPE_Y_AXIS:"yAxis",COMPONENT_TYPE_AXIS_CATEGORY:"categoryAxis",COMPONENT_TYPE_AXIS_VALUE:"valueAxis",COMPONENT_TYPE_TIMELINE:"timeline",COMPONENT_TYPE_ROAMCONTROLLER:"roamController",backgroundColor:"rgba(0,0,0,0)",color:["#ff7f50","#87cefa","#da70d6","#32cd32","#6495ed","#ff69b4","#ba55d3","#cd5c5c","#ffa500","#40e0d0","#1e90ff","#ff6347","#7b68ee","#00fa9a","#ffd700","#6699FF","#ff6666","#3cb371","#b8860b","#30e0e0"],title:{text:"",subtext:"",x:"left",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:5,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}},legend:{show:!0,orient:"horizontal",x:"center",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,textStyle:{color:"#333"},selectedMode:!0},dataRange:{show:!0,orient:"vertical",x:"left",y:"bottom",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,precision:0,splitNumber:5,calculable:!1,hoverLink:!0,realtime:!0,color:["#006edd","#e0ffff"],textStyle:{color:"#333"}},toolbox:{show:!1,orient:"horizontal",x:"right",y:"top",color:["#1e90ff","#22bb22","#4b0082","#d2691e"],disableColor:"#ddd",effectiveColor:"red",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemSize:16,showTitle:!0,feature:{mark:{show:!1,title:{mark:"辅助线开关",markUndo:"删除辅助线",markClear:"清空辅助线"},lineStyle:{width:1,color:"#1e90ff",type:"dashed"}},dataZoom:{show:!1,title:{dataZoom:"区域缩放",dataZoomReset:"区域缩放后退"}},dataView:{show:!1,title:"数据视图",readOnly:!1,lang:["数据视图","关闭","刷新"]},magicType:{show:!1,title:{line:"折线图切换",bar:"柱形图切换",stack:"堆积",tiled:"平铺",force:"力导向布局图切换",chord:"和弦图切换",pie:"饼图切换",funnel:"漏斗图切换"},type:[]},restore:{show:!1,title:"还原"},saveAsImage:{show:!1,title:"保存为图片",type:"png",lang:["点击保存"]}}},tooltip:{show:!0,showContent:!0,trigger:"item",islandFormatter:"{a}
{b} : {c}",showDelay:20,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(0,0,0,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,axisPointer:{type:"line",lineStyle:{color:"#48b",width:2,type:"solid"},crossStyle:{color:"#1e90ff",width:1,type:"dashed"},shadowStyle:{color:"rgba(150,150,150,0.3)",width:"auto",type:"default"}},textStyle:{color:"#fff"}},dataZoom:{show:!1,orient:"horizontal",backgroundColor:"rgba(0,0,0,0)",dataBackgroundColor:"#eee",fillerColor:"rgba(144,197,237,0.2)",handleColor:"rgba(70,130,180,0.8)",showDetail:!0,realtime:!0},grid:{x:80,y:60,x2:80,y2:60,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},categoryAxis:{show:!0,position:"bottom",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!0,interval:"auto",inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,interval:"auto",rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},valueAxis:{show:!0,position:"left",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:[0,0],axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},polar:{center:["50%","50%"],radius:"75%",startAngle:90,boundaryGap:[0,0],splitNumber:5,name:{show:!0,textStyle:{color:"#333"}},axisLine:{show:!0,lineStyle:{color:"#ccc",width:1,type:"solid"}},axisLabel:{show:!1,textStyle:{color:"#333"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}},splitLine:{show:!0,lineStyle:{width:1,color:"#ccc"}},type:"polygon"},timeline:{show:!0,type:"time",notMerge:!1,realtime:!0,x:80,x2:80,y2:0,height:50,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,controlPosition:"left",autoPlay:!1,loop:!0,playInterval:2e3,lineStyle:{width:1,color:"#666",type:"dashed"},label:{show:!0,interval:"auto",rotate:0,textStyle:{color:"#333"}},checkpointStyle:{symbol:"auto",symbolSize:"auto",color:"auto",borderColor:"auto",borderWidth:"auto",label:{show:!1,textStyle:{color:"auto"}}},controlStyle:{normal:{color:"#333"},emphasis:{color:"#1e90ff"}},symbol:"emptyDiamond",symbolSize:4,currentIndex:0},roamController:{show:!0,x:"left",y:"top",width:80,height:120,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,handleColor:"#6495ed",fillerColor:"#fff",step:15,mapTypeControl:null},bar:{clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,barMinHeight:0,barGap:"30%",barCategoryGap:"20%",itemStyle:{normal:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}},emphasis:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}}}},line:{clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1}}},symbolSize:2,showAllSymbol:!1},k:{clickable:!0,legendHoverLink:!1,xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{color:"#fff",color0:"#00aa11",lineStyle:{width:1,color:"#ff3200",color0:"#00aa11"}},emphasis:{}}},scatter:{clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbolSize:4,large:!1,largeThreshold:2e3,itemStyle:{normal:{label:{show:!1,formatter:function(e,t,i){return"undefined"!=typeof i[2]?i[2]:i[0]+" , "+i[1] +}}},emphasis:{label:{show:!1,formatter:function(e,t,i){return"undefined"!=typeof i[2]?i[2]:i[0]+" , "+i[1]}}}}},radar:{clickable:!0,legendHoverLink:!0,polarIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid"}},emphasis:{label:{show:!1}}},symbolSize:2},pie:{clickable:!0,legendHoverLink:!0,center:["50%","50%"],radius:[0,"75%"],clockWise:!0,startAngle:90,minAngle:0,selectedOffset:10,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!1},labelLine:{show:!1,length:20,lineStyle:{width:1,type:"solid"}}}}},map:{mapType:"china",mapValuePrecision:0,showLegendSymbol:!0,dataRangeHoverLink:!0,hoverable:!0,clickable:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"#ccc"},label:{show:!1,textStyle:{color:"rgb(139,69,19)"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"rgba(255,215,0,0.8)"},label:{show:!1,textStyle:{color:"rgb(100,0,0)"}}}}},force:{center:["50%","50%"],size:"100%",preventOverlap:!1,coolDown:.99,minRadius:10,maxRadius:20,ratioScaling:!1,large:!1,useWorker:!1,steps:1,scaling:1,gravity:1,symbol:"circle",symbolSize:0,linkSymbol:null,linkSymbolSize:[10,15],draggable:!0,clickable:!0,roam:!1,itemStyle:{normal:{label:{show:!1,position:"inside"},nodeStyle:{brushType:"both",borderColor:"#5182ab",borderWidth:1},linkStyle:{color:"#5182ab",width:1,type:"line"}},emphasis:{label:{show:!1},nodeStyle:{},linkStyle:{opacity:0}}}},chord:{clickable:!0,radius:["65%","75%"],center:["50%","50%"],padding:2,sort:"none",sortSub:"none",startAngle:90,clockWise:!0,ribbonType:!0,minRadius:10,maxRadius:20,symbol:"circle",showScale:!1,showScaleText:!1,itemStyle:{normal:{borderWidth:0,borderColor:"#000",label:{show:!0,rotate:!1,distance:5},chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999",opacity:.5}},emphasis:{borderWidth:0,borderColor:"#000",chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999"}}}},gauge:{center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,min:0,max:100,precision:0,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,"#228b22"],[.8,"#48b"],[1,"#ff4500"]],width:30}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:"#eee",width:1,type:"solid"}},axisLabel:{show:!0,textStyle:{color:"auto"}},splitLine:{show:!0,length:30,lineStyle:{color:"#eee",width:2,type:"solid"}},pointer:{show:!0,length:"80%",width:8,color:"auto"},title:{show:!0,offsetCenter:[0,"-40%"],textStyle:{color:"#333",fontSize:15}},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:40,offsetCenter:[0,"40%"],textStyle:{color:"auto",fontSize:30}}},funnel:{clickable:!0,legendHoverLink:!0,x:80,y:60,x2:80,y2:60,min:0,max:100,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",itemStyle:{normal:{borderColor:"#fff",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:10,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0},labelLine:{show:!0}}}},eventRiver:{clickable:!0,legendHoverLink:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"inside",formatter:"{b}"}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0}}}},island:{r:15,calculateStep:.1},markPoint:{clickable:!0,symbol:"pin",symbolSize:10,large:!1,effect:{show:!1,loop:!0,period:15,scaleSize:2},itemStyle:{normal:{borderWidth:2,label:{show:!0,position:"inside"}},emphasis:{label:{show:!0}}}},markLine:{clickable:!0,symbol:["circle","arrow"],symbolSize:[2,4],large:!1,effect:{show:!1,loop:!0,period:15,scaleSize:2},itemStyle:{normal:{borderWidth:1.5,label:{show:!0,position:"end"},lineStyle:{type:"dashed"}},emphasis:{label:{show:!1},lineStyle:{}}}},textStyle:{decoration:"none",fontFamily:"Arial, Verdana, sans-serif",fontFamily2:"微软雅黑",fontSize:12,fontStyle:"normal",fontWeight:"normal"},EVENT:{REFRESH:"refresh",RESTORE:"restore",RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",HOVER:"hover",MOUSEOUT:"mouseout",DATA_CHANGED:"dataChanged",DATA_ZOOM:"dataZoom",DATA_RANGE:"dataRange",DATA_RANGE_HOVERLINK:"dataRangeHoverLink",LEGEND_SELECTED:"legendSelected",LEGEND_HOVERLINK:"legendHoverLink",MAP_SELECTED:"mapSelected",PIE_SELECTED:"pieSelected",MAGIC_TYPE_CHANGED:"magicTypeChanged",DATA_VIEW_CHANGED:"dataViewChanged",TIMELINE_CHANGED:"timelineChanged",MAP_ROAM:"mapRoam",FORCE_LAYOUT_END:"forceLayoutEnd",TOOLTIP_HOVER:"tooltipHover",TOOLTIP_IN_GRID:"tooltipInGrid",TOOLTIP_OUT_GRID:"tooltipOutGrid",ROAMCONTROLLER:"roamController"},DRAG_ENABLE_TIME:120,EFFECT_ZLEVEL:7,symbolList:["circle","rectangle","triangle","diamond","emptyCircle","emptyRectangle","emptyTriangle","emptyDiamond"],loadingText:"Loading...",calculable:!1,calculableColor:"rgba(255,165,0,0.6)",calculableHolderColor:"#ccc",nameConnector:" & ",valueConnector:": ",animation:!0,addDataAnimation:!0,animationThreshold:2e3,animationDuration:2e3,animationEasing:"ExponentialOut"};return e}),define("zrender/tool/util",["require","../dep/excanvas"],function(e){function t(e){if("object"==typeof e&&null!==e){var i=e;if(e instanceof Array){i=[];for(var n=0,a=e.length;a>n;n++)i[n]=t(e[n])}else if(!V[Object.prototype.toString.call(e)]){i={};for(var o in e)e.hasOwnProperty(o)&&(i[o]=t(e[o]))}return i}return e}function i(e,t,i,a){t.hasOwnProperty(i)&&("object"!=typeof e[i]||V[Object.prototype.toString.call(e[i])]?!a&&i in e||(e[i]=t[i]):n(e[i],t[i],a))}function n(e,t,n){for(var a in t)i(e,t,a,n);return e}function a(){if(!d)if(e("../dep/excanvas"),window.G_vmlCanvasManager){var t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",document.body.appendChild(t),d=G_vmlCanvasManager.initElement(t).getContext("2d")}else d=document.createElement("canvas").getContext("2d");return d}function o(){return c||(m=document.createElement("canvas"),p=m.width,u=m.height,c=m.getContext("2d")),c}function r(e,t){var i,n=100;e+U>p&&(p=e+U+n,m.width=p,i=!0),t+y>u&&(u=t+y+n,m.height=u,i=!0),-U>e&&(U=Math.ceil(-e/n)*n,p+=U,m.width=p,i=!0),-y>t&&(y=Math.ceil(-t/n)*n,u+=y,m.height=u,i=!0),i&&c.translate(U,y)}function s(){return{x:U,y:y}}function l(e,t){if(e.indexOf)return e.indexOf(t);for(var i=0,n=e.length;n>i;i++)if(e[i]===t)return i;return-1}function h(e,t){function i(){}var n=e.prototype;i.prototype=t.prototype,e.prototype=new i;for(var a in n)e.prototype[a]=n[a];e.constructor=e}var d,m,c,p,u,V={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1},U=0,y=0;return{inherits:h,clone:t,merge:n,getContext:a,getPixelContext:o,getPixelOffset:s,adjustCanvasSize:r,indexOf:l}}),define("zrender/tool/event",["require","../mixin/Eventful"],function(e){"use strict";function t(e){return"undefined"!=typeof e.zrenderX&&e.zrenderX||"undefined"!=typeof e.offsetX&&e.offsetX||"undefined"!=typeof e.layerX&&e.layerX||"undefined"!=typeof e.clientX&&e.clientX}function i(e){return"undefined"!=typeof e.zrenderY&&e.zrenderY||"undefined"!=typeof e.offsetY&&e.offsetY||"undefined"!=typeof e.layerY&&e.layerY||"undefined"!=typeof e.clientY&&e.clientY}function n(e){return"undefined"!=typeof e.zrenderDelta&&e.zrenderDelta||"undefined"!=typeof e.wheelDelta&&e.wheelDelta||"undefined"!=typeof e.detail&&-e.detail}var a=e("../mixin/Eventful"),o="function"==typeof window.addEventListener?function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0}:function(e){e.returnValue=!1,e.cancelBubble=!0};return{getX:t,getY:i,getDelta:n,stop:o,Dispatcher:a}}),define("zrender/tool/env",[],function(){function e(e){var t=this.os={},i=this.browser={},n=e.match(/Web[kK]it[\/]{0,1}([\d.]+)/),a=e.match(/(Android);?[\s\/]+([\d.]+)?/),o=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),s=!o&&e.match(/(iPhone\sOS)\s([\d_]+)/),l=e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),h=l&&e.match(/TouchPad/),d=e.match(/Kindle\/([\d.]+)/),m=e.match(/Silk\/([\d._]+)/),c=e.match(/(BlackBerry).*Version\/([\d.]+)/),p=e.match(/(BB10).*Version\/([\d.]+)/),u=e.match(/(RIM\sTablet\sOS)\s([\d.]+)/),V=e.match(/PlayBook/),U=e.match(/Chrome\/([\d.]+)/)||e.match(/CriOS\/([\d.]+)/),y=e.match(/Firefox\/([\d.]+)/),g=e.match(/MSIE ([\d.]+)/),f=n&&e.match(/Mobile\//)&&!U,b=e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/)&&!U,g=e.match(/MSIE\s([\d.]+)/);return(i.webkit=!!n)&&(i.version=n[1]),a&&(t.android=!0,t.version=a[2]),s&&!r&&(t.ios=t.iphone=!0,t.version=s[2].replace(/_/g,".")),o&&(t.ios=t.ipad=!0,t.version=o[2].replace(/_/g,".")),r&&(t.ios=t.ipod=!0,t.version=r[3]?r[3].replace(/_/g,"."):null),l&&(t.webos=!0,t.version=l[2]),h&&(t.touchpad=!0),c&&(t.blackberry=!0,t.version=c[2]),p&&(t.bb10=!0,t.version=p[2]),u&&(t.rimtabletos=!0,t.version=u[2]),V&&(i.playbook=!0),d&&(t.kindle=!0,t.version=d[1]),m&&(i.silk=!0,i.version=m[1]),!m&&t.android&&e.match(/Kindle Fire/)&&(i.silk=!0),U&&(i.chrome=!0,i.version=U[1]),y&&(i.firefox=!0,i.version=y[1]),g&&(i.ie=!0,i.version=g[1]),f&&(e.match(/Safari/)||t.ios)&&(i.safari=!0),b&&(i.webview=!0),g&&(i.ie=!0,i.version=g[1]),t.tablet=!!(o||V||a&&!e.match(/Mobile/)||y&&e.match(/Tablet/)||g&&!e.match(/Phone/)&&e.match(/Touch/)),t.phone=!(t.tablet||t.ipod||!(a||s||l||c||p||U&&e.match(/Android/)||U&&e.match(/CriOS\/([\d.]+)/)||y&&e.match(/Mobile/)||g&&e.match(/Touch/))),{browser:i,os:t,canvasSupported:document.createElement("canvas").getContext?!0:!1}}return e(navigator.userAgent)}),define("zrender",["zrender/zrender"],function(e){return e}),define("zrender/zrender",["require","./dep/excanvas","./tool/util","./tool/log","./tool/guid","./Handler","./Painter","./Storage","./animation/Animation","./tool/env"],function(e){function t(e){return function(){for(var t=e.animatingElements,i=0,n=t.length;n>i;i++)e.storage.mod(t[i].id);(t.length||e._needsRefreshNextFrame)&&e.refresh()}}e("./dep/excanvas");var i=e("./tool/util"),n=e("./tool/log"),a=e("./tool/guid"),o=e("./Handler"),r=e("./Painter"),s=e("./Storage"),l=e("./animation/Animation"),h={},d={};d.version="2.0.6",d.init=function(e){var t=new m(a(),e);return h[t.id]=t,t},d.dispose=function(e){if(e)e.dispose();else{for(var t in h)h[t].dispose();h={}}return d},d.getInstance=function(e){return h[e]},d.delInstance=function(e){return delete h[e],d};var m=function(i,n){this.id=i,this.env=e("./tool/env"),this.storage=new s,this.painter=new r(n,this.storage),this.handler=new o(n,this.storage,this.painter),this.animatingElements=[],this.animation=new l({stage:{update:t(this)}}),this.animation.start();var a=this;this.painter.refreshNextFrame=function(){a.refreshNextFrame()},this._needsRefreshNextFrame=!1};return m.prototype.getId=function(){return this.id},m.prototype.addShape=function(e){return this.storage.addRoot(e),this},m.prototype.addGroup=function(e){return this.storage.addRoot(e),this},m.prototype.delShape=function(e){return this.storage.delRoot(e),this},m.prototype.delGroup=function(e){return this.storage.delRoot(e),this},m.prototype.modShape=function(e,t){return this.storage.mod(e,t),this},m.prototype.modGroup=function(e,t){return this.storage.mod(e,t),this},m.prototype.modLayer=function(e,t){return this.painter.modLayer(e,t),this},m.prototype.addHoverShape=function(e){return this.storage.addHover(e),this},m.prototype.render=function(e){return this.painter.render(e),this._needsRefreshNextFrame=!1,this},m.prototype.refresh=function(e){return this.painter.refresh(e),this._needsRefreshNextFrame=!1,this},m.prototype.refreshNextFrame=function(){return this._needsRefreshNextFrame=!0,this},m.prototype.refreshHover=function(e){return this.painter.refreshHover(e),this},m.prototype.refreshShapes=function(e,t){return this.painter.refreshShapes(e,t),this},m.prototype.resize=function(){return this.painter.resize(),this},m.prototype.animate=function(e,t,a){if("string"==typeof e&&(e=this.storage.get(e)),e){var o;if(t){for(var r=t.split("."),s=e,l=0,h=r.length;h>l;l++)s&&(s=s[r[l]]);s&&(o=s)}else o=e;if(!o)return void n('Property "'+t+'" is not existed in element '+e.id);var d=this.animatingElements;return"undefined"==typeof e.__aniCount&&(e.__aniCount=0),0===e.__aniCount&&d.push(e),e.__aniCount++,this.animation.animate(o,{loop:a}).done(function(){if(e.__aniCount--,0===e.__aniCount){var t=i.indexOf(d,e);d.splice(t,1)}})}n("Element not existed")},m.prototype.clearAnimation=function(){this.animation.clear()},m.prototype.showLoading=function(e){return this.painter.showLoading(e),this},m.prototype.hideLoading=function(){return this.painter.hideLoading(),this},m.prototype.getWidth=function(){return this.painter.getWidth()},m.prototype.getHeight=function(){return this.painter.getHeight()},m.prototype.toDataURL=function(e,t,i){return this.painter.toDataURL(e,t,i)},m.prototype.shapeToImage=function(e,t,i){var n=a();return this.painter.shapeToImage(n,e,t,i)},m.prototype.on=function(e,t){return this.handler.on(e,t),this},m.prototype.un=function(e,t){return this.handler.un(e,t),this},m.prototype.trigger=function(e,t){return this.handler.trigger(e,t),this},m.prototype.clear=function(){return this.storage.delRoot(),this.painter.clear(),this},m.prototype.dispose=function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.animatingElements=this.storage=this.painter=this.handler=null,d.delInstance(this.id)},d}),define("zrender/config",[],function(){var e={EVENT:{RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",MOUSEWHEEL:"mousewheel",MOUSEMOVE:"mousemove",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",GLOBALOUT:"globalout",DRAGSTART:"dragstart",DRAGEND:"dragend",DRAGENTER:"dragenter",DRAGOVER:"dragover",DRAGLEAVE:"dragleave",DROP:"drop",touchClickDelay:300},catchBrushException:!1,debugMode:0};return e}),define("echarts/chart/island",["require","../component/base","./base","zrender/shape/Circle","../config","../util/ecData","zrender/tool/util","zrender/tool/event","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,a,o,s){i.call(this,e,t,a,{},s),n.call(this),this._nameConnector,this._valueConnector,this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth();var h=this;h.shapeHandler.onmousewheel=function(e){var t=e.target,i=e.event,n=l.getDelta(i);n=n>0?-1:1,t.style.r-=n,t.style.r=t.style.r<5?5:t.style.r;var a=r.get(t,"value"),o=a*h.option.island.calculateStep;a=o>1?Math.round(a-o*n):(a-o*n).toFixed(2)-0;var s=r.get(t,"name");t.style.text=s+":"+a,r.set(t,"value",a),r.set(t,"name",s),h.zr.modShape(t.id),h.zr.refresh(),l.stop(i)}}var i=e("../component/base"),n=e("./base"),a=e("zrender/shape/Circle"),o=e("../config"),r=e("../util/ecData"),s=e("zrender/tool/util"),l=e("zrender/tool/event");return t.prototype={type:o.CHART_TYPE_ISLAND,_combine:function(t,i){var n=e("zrender/tool/color"),a=e("../util/accMath"),o=a.accAdd(r.get(t,"value"),r.get(i,"value")),s=r.get(t,"name")+this._nameConnector+r.get(i,"name");t.style.text=s+this._valueConnector+o,r.set(t,"value",o),r.set(t,"name",s),t.style.r=this.option.island.r,t.style.color=n.mix(t.style.color,i.style.color)},refresh:function(e){e&&(e.island=this.reformOption(e.island),this.option=e,this._nameConnector=this.option.nameConnector,this._valueConnector=this.option.valueConnector)},getOption:function(){return this.option},resize:function(){var e=this.zr.getWidth(),t=this.zr.getHeight(),i=e/(this._zrWidth||e),n=t/(this._zrHeight||t);if(1!==i||1!==n){this._zrWidth=e,this._zrHeight=t;for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.modShape(this.shapeList[a].id,{style:{x:Math.round(this.shapeList[a].style.x*i),y:Math.round(this.shapeList[a].style.y*n)}})}},add:function(e){var t=r.get(e,"name"),i=r.get(e,"value"),n=null!=r.get(e,"series")?r.get(e,"series").name:"",o=this.getFont(this.option.island.textStyle),s={zlevel:this._zlevelBase,style:{x:e.style.x,y:e.style.y,r:this.option.island.r,color:e.style.color||e.style.strokeColor,text:t+this._valueConnector+i,textFont:o},draggable:!0,hoverable:!0,onmousewheel:this.shapeHandler.onmousewheel,_type:"island"};"#fff"===s.style.color&&(s.style.color=e.style.strokeColor),this.setCalculable(s),s.dragEnableTime=0,r.pack(s,{name:n},-1,i,-1,t),s=new a(s),this.shapeList.push(s),this.zr.addShape(s)},del:function(e){this.zr.delShape(e.id);for(var t=[],i=0,n=this.shapeList.length;n>i;i++)this.shapeList[i].id!=e.id&&t.push(this.shapeList[i]);this.shapeList=t},ondrop:function(e,t){if(this.isDrop&&e.target){var i=e.target,n=e.dragged;this._combine(i,n),this.zr.modShape(i.id),t.dragIn=!0,this.isDrop=!1}},ondragend:function(e,t){var i=e.target;this.isDragend?t.dragIn&&(this.del(i),t.needRefresh=!0):t.dragIn||(i.style.x=l.getX(e.event),i.style.y=l.getY(e.event),this.add(i),t.needRefresh=!0),this.isDragend=!1}},s.inherits(t,n),s.inherits(t,i),e("../chart").define("island",t),t}),define("echarts/component/toolbox",["require","./base","zrender/shape/Line","zrender/shape/Image","zrender/shape/Rectangle","../util/shape/Icon","../config","zrender/tool/util","zrender/config","zrender/tool/event","./dataView","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._magicType={},this._magicMap={},this._isSilence=!1,this._iconList,this._iconShapeMap={},this._featureTitle={},this._featureIcon={},this._featureColor={},this._featureOption={},this._enableColor="red",this._disableColor="#ccc",this._markShapeList=[];var r=this;r._onMark=function(e){r.__onMark(e)},r._onMarkUndo=function(e){r.__onMarkUndo(e)},r._onMarkClear=function(e){r.__onMarkClear(e)},r._onDataZoom=function(e){r.__onDataZoom(e)},r._onDataZoomReset=function(e){r.__onDataZoomReset(e)},r._onDataView=function(e){r.__onDataView(e)},r._onRestore=function(e){r.__onRestore(e)},r._onSaveAsImage=function(e){r.__onSaveAsImage(e)},r._onMagicType=function(e){r.__onMagicType(e)},r._onCustomHandler=function(e){r.__onCustomHandler(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onclick=function(e){return r.__onclick(e)}}var i=e("./base"),n=e("zrender/shape/Line"),a=e("zrender/shape/Image"),o=e("zrender/shape/Rectangle"),r=e("../util/shape/Icon"),s=e("../config"),l=e("zrender/tool/util"),h=e("zrender/config"),d=e("zrender/tool/event"),m="stack",c="tiled";return t.prototype={type:s.COMPONENT_TYPE_TOOLBOX,_buildShape:function(){this._iconList=[];var e=this.option.toolbox;this._enableColor=e.effectiveColor,this._disableColor=e.disableColor;var t=e.feature,i=[];for(var n in t)if(t[n].show)switch(n){case"mark":i.push({key:n,name:"mark"}),i.push({key:n,name:"markUndo"}),i.push({key:n,name:"markClear"});break;case"magicType":for(var a=0,o=t[n].type.length;o>a;a++)t[n].title[t[n].type[a]+"Chart"]=t[n].title[t[n].type[a]],t[n].option&&(t[n].option[t[n].type[a]+"Chart"]=t[n].option[t[n].type[a]]),i.push({key:n,name:t[n].type[a]+"Chart"});break;case"dataZoom":i.push({key:n,name:"dataZoom"}),i.push({key:n,name:"dataZoomReset"});break;case"saveAsImage":this.canvasSupported&&i.push({key:n,name:"saveAsImage"});break;default:i.push({key:n,name:n})}if(i.length>0){for(var r,n,a=0,o=i.length;o>a;a++)r=i[a].name,n=i[a].key,this._iconList.push(r),this._featureTitle[r]=t[n].title[r]||t[n].title,t[n].icon&&(this._featureIcon[r]=t[n].icon[r]||t[n].icon),t[n].color&&(this._featureColor[r]=t[n].color[r]||t[n].color),t[n].option&&(this._featureOption[r]=t[n].option[r]||t[n].option);this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.addShape(this.shapeList[a]);this._iconShapeMap.mark&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear)),this._iconShapeMap.dataZoomReset&&0===this._zoomQueue.length&&this._iconDisable(this._iconShapeMap.dataZoomReset)}},_buildItem:function(){var t,i,n,o,s=this.option.toolbox,l=this._iconList.length,h=this._itemGroupLocation.x,d=this._itemGroupLocation.y,m=s.itemSize,c=s.itemGap,p=s.color instanceof Array?s.color:[s.color],u=this.getFont(s.textStyle);"horizontal"===s.orient?(i=this._itemGroupLocation.y/this.zr.getHeight()<.5?"bottom":"top",n=this._itemGroupLocation.x/this.zr.getWidth()<.5?"left":"right",o=this._itemGroupLocation.y/this.zr.getHeight()<.5?"top":"bottom"):i=this._itemGroupLocation.x/this.zr.getWidth()<.5?"right":"left",this._iconShapeMap={};for(var V=this,U=0;l>U;U++){switch(t={type:"icon",zlevel:this._zlevelBase,style:{x:h,y:d,width:m,height:m,iconType:this._iconList[U],lineWidth:1,strokeColor:this._featureColor[this._iconList[U]]||p[U%p.length],brushType:"stroke"},highlightStyle:{lineWidth:1,text:s.showTitle?this._featureTitle[this._iconList[U]]:void 0,textFont:u,textPosition:i,strokeColor:this._featureColor[this._iconList[U]]||p[U%p.length]},hoverable:!0,clickable:!0},this._featureIcon[this._iconList[U]]&&(t.style.image=this._featureIcon[this._iconList[U]].replace(new RegExp("^image:\\/\\/"),""),t.style.opacity=.8,t.highlightStyle.opacity=1,t.type="image"),"horizontal"===s.orient&&(0===U&&"left"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h,t.highlightStyle.textY="top"===o?d+m+10:d-10),U===l-1&&"right"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h+m,t.highlightStyle.textY="top"===o?d+m+10:d-10)),this._iconList[U]){case"mark":t.onclick=V._onMark;break;case"markUndo":t.onclick=V._onMarkUndo;break;case"markClear":t.onclick=V._onMarkClear;break;case"dataZoom":t.onclick=V._onDataZoom;break;case"dataZoomReset":t.onclick=V._onDataZoomReset;break;case"dataView":if(!this._dataView){var y=e("./dataView");this._dataView=new y(this.ecTheme,this.messageCenter,this.zr,this.option,this.myChart)}t.onclick=V._onDataView;break;case"restore":t.onclick=V._onRestore;break;case"saveAsImage":t.onclick=V._onSaveAsImage;break;default:this._iconList[U].match("Chart")?(t._name=this._iconList[U].replace("Chart",""),t.onclick=V._onMagicType):t.onclick=V._onCustomHandler}"icon"===t.type?t=new r(t):"image"===t.type&&(t=new a(t)),this.shapeList.push(t),this._iconShapeMap[this._iconList[U]]=t,"horizontal"===s.orient?h+=m+c:d+=m+c}},_buildBackground:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding);this.shapeList.push(new o({zlevel:this._zlevelBase,hoverable:!1,style:{x:this._itemGroupLocation.x-t[3],y:this._itemGroupLocation.y-t[0],width:this._itemGroupLocation.width+t[3]+t[1],height:this._itemGroupLocation.height+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_getItemGroupLocation:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding),i=this._iconList.length,n=e.itemGap,a=e.itemSize,o=0,r=0;"horizontal"===e.orient?(o=(a+n)*i-n,r=a):(r=(a+n)*i-n,o=a);var s,l=this.zr.getWidth();switch(e.x){case"center":s=Math.floor((l-o)/2);break;case"left":s=t[3]+e.borderWidth;break;case"right":s=l-o-t[1]-e.borderWidth;break;default:s=e.x-0,s=isNaN(s)?0:s}var h,d=this.zr.getHeight();switch(e.y){case"top":h=t[0]+e.borderWidth;break;case"bottom":h=d-r-t[2]-e.borderWidth;break;case"center":h=Math.floor((d-r)/2);break;default:h=e.y-0,h=isNaN(h)?0:h}return{x:s,y:h,width:o,height:r}},__onmousemove:function(e){this._marking&&(this._markShape.style.xEnd=d.getX(e.event),this._markShape.style.yEnd=d.getY(e.event),this.zr.addHoverShape(this._markShape)),this._zooming&&(this._zoomShape.style.width=d.getX(e.event)-this._zoomShape.style.x,this._zoomShape.style.height=d.getY(e.event)-this._zoomShape.style.y,this.zr.addHoverShape(this._zoomShape),this.dom.style.cursor="crosshair"),this._zoomStart&&"pointer"!=this.dom.style.cursor&&"move"!=this.dom.style.cursor&&(this.dom.style.cursor="crosshair")},__onmousedown:function(e){if(!e.target){this._zooming=!0;var t=d.getX(e.event),i=d.getY(e.event),n=this.option.dataZoom||{};return this._zoomShape=new o({zlevel:this._zlevelBase,style:{x:t,y:i,width:1,height:1,brushType:"both"},highlightStyle:{lineWidth:2,color:n.fillerColor||s.dataZoom.fillerColor,strokeColor:n.handleColor||s.dataZoom.handleColor,brushType:"both"}}),this.zr.addHoverShape(this._zoomShape),!0}},__onmouseup:function(){if(!this._zoomShape||Math.abs(this._zoomShape.style.width)<10||Math.abs(this._zoomShape.style.height)<10)return this._zooming=!1,!0;if(this._zooming&&this.component.dataZoom){this._zooming=!1;var e=this.component.dataZoom.rectZoom(this._zoomShape.style);e&&(this._zoomQueue.push({start:e.start,end:e.end,start2:e.start2,end2:e.end2}),this._iconEnable(this._iconShapeMap.dataZoomReset),this.zr.refresh())}return!0},__onclick:function(e){if(!e.target)if(this._marking)this._marking=!1,this._markShapeList.push(this._markShape),this._iconEnable(this._iconShapeMap.markUndo),this._iconEnable(this._iconShapeMap.markClear),this.zr.addShape(this._markShape),this.zr.refresh();else if(this._markStart){this._marking=!0;var t=d.getX(e.event),i=d.getY(e.event);this._markShape=new n({zlevel:this._zlevelBase,style:{xStart:t,yStart:i,xEnd:t,yEnd:i,lineWidth:this.query(this.option,"toolbox.feature.mark.lineStyle.width"),strokeColor:this.query(this.option,"toolbox.feature.mark.lineStyle.color"),lineType:this.query(this.option,"toolbox.feature.mark.lineStyle.type")}}),this.zr.addHoverShape(this._markShape)}},__onMark:function(e){var t=e.target;if(this._marking||this._markStart)this._resetMark(),this.zr.refresh();else{this._resetZoom(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refresh(),this._markStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.CLICK,i._onclick)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10)}return!0},__onMarkUndo:function(){if(this._marking)this._marking=!1;else{var e=this._markShapeList.length;if(e>=1){var t=this._markShapeList[e-1];this.zr.delShape(t.id),this.zr.refresh(),this._markShapeList.pop(),1===e&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear))}}return!0},__onMarkClear:function(){this._marking&&(this._marking=!1);var e=this._markShapeList.length;if(e>0){for(;e--;)this.zr.delShape(this._markShapeList.pop().id);this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear),this.zr.refresh()}return!0},__onDataZoom:function(e){var t=e.target;if(this._zooming||this._zoomStart)this._resetZoom(),this.zr.refresh(),this.dom.style.cursor="default";else{this._resetMark(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refresh(),this._zoomStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.MOUSEDOWN,i._onmousedown)&&i.zr.on(h.EVENT.MOUSEUP,i._onmouseup)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10),this.dom.style.cursor="crosshair"}return!0},__onDataZoomReset:function(){return this._zooming&&(this._zooming=!1),this._zoomQueue.pop(),this._zoomQueue.length>0?this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length-1]):(this.component.dataZoom.rectZoom(),this._iconDisable(this._iconShapeMap.dataZoomReset),this.zr.refresh()),!0},_resetMark:function(){this._marking=!1,this._markStart&&(this._markStart=!1,this._iconShapeMap.mark&&this.zr.modShape(this._iconShapeMap.mark.id,{style:{strokeColor:this._iconShapeMap.mark.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.CLICK,this._onclick),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_resetZoom:function(){this._zooming=!1,this._zoomStart&&(this._zoomStart=!1,this._iconShapeMap.dataZoom&&this.zr.modShape(this._iconShapeMap.dataZoom.id,{style:{strokeColor:this._iconShapeMap.dataZoom.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.MOUSEDOWN,this._onmousedown),this.zr.un(h.EVENT.MOUSEUP,this._onmouseup),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_iconDisable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{strokeColor:this._disableColor}}):this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{opacity:.3}})},_iconEnable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{strokeColor:e.highlightStyle.strokeColor}}):this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{opacity:.8}})},__onDataView:function(){return this._dataView.show(this.option),!0},__onRestore:function(){return this._resetMark(),this._resetZoom(),this.messageCenter.dispatch(s.EVENT.RESTORE,null,null,this.myChart),!0},__onSaveAsImage:function(){var e=this.option.toolbox.feature.saveAsImage,t=e.type||"png";"png"!=t&&"jpeg"!=t&&(t="png");var i;i=this.myChart.isConnected()?this.myChart.getConnectedDataURL(t):this.zr.toDataURL("image/"+t,this.option.backgroundColor&&"rgba(0,0,0,0)"===this.option.backgroundColor.replace(" ","")?"#fff":this.option.backgroundColor);var n=document.createElement("div");n.id="__echarts_download_wrap__",n.style.cssText="position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:"+document.documentElement.clientHeight+"px;";var a=document.createElement("a");a.href=i,a.setAttribute("download",(e.name?e.name:this.option.title&&(this.option.title.text||this.option.title.subtext)?this.option.title.text||this.option.title.subtext:"ECharts")+"."+t),a.innerHTML='图片另存为":e.lang?e.lang[0]:"点击保存")+'"/>',n.appendChild(a),document.body.appendChild(n),a=null,n=null,setTimeout(function(){var e=document.getElementById("__echarts_download_wrap__");e&&(e.onclick=function(){var e=document.getElementById("__echarts_download_wrap__");e.onclick=null,e.innerHTML="",document.body.removeChild(e),e=null},e=null)},500)},__onMagicType:function(e){this._resetMark();var t=e.target._name;return this._magicType[t]||(this._magicType[t]=!0,t===s.CHART_TYPE_LINE?this._magicType[s.CHART_TYPE_BAR]=!1:t===s.CHART_TYPE_BAR&&(this._magicType[s.CHART_TYPE_LINE]=!1),t===s.CHART_TYPE_PIE?this._magicType[s.CHART_TYPE_FUNNEL]=!1:t===s.CHART_TYPE_FUNNEL&&(this._magicType[s.CHART_TYPE_PIE]=!1),t===s.CHART_TYPE_FORCE?this._magicType[s.CHART_TYPE_CHORD]=!1:t===s.CHART_TYPE_CHORD&&(this._magicType[s.CHART_TYPE_FORCE]=!1),t===m?this._magicType[c]=!1:t===c&&(this._magicType[m]=!1),this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,e.event,{magicType:this._magicType},this.myChart)),!0},setMagicType:function(e){this._resetMark(),this._magicType=e,!this._isSilence&&this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,null,{magicType:this._magicType},this.myChart)},__onCustomHandler:function(e){var t=e.target.style.iconType,i=this.option.toolbox.feature[t].onclick;"function"==typeof i&&i.call(this,this.option)},reset:function(e,t){if(t&&this.clear(),this.query(e,"toolbox.show")&&this.query(e,"toolbox.feature.magicType.show")){var i=e.toolbox.feature.magicType.type,n=i.length;for(this._magicMap={};n--;)this._magicMap[i[n]]=!0;n=e.series.length;for(var a,o;n--;)a=e.series[n].type,this._magicMap[a]&&(o=e.xAxis instanceof Array?e.xAxis[e.series[n].xAxisIndex||0]:e.xAxis,o&&"category"===(o.type||"category")&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),o=e.yAxis instanceof Array?e.yAxis[e.series[n].yAxisIndex||0]:e.yAxis,o&&"category"===o.type&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),e.series[n].__type=a,e.series[n].__itemStyle=l.clone(e.series[n].itemStyle||{})),(this._magicMap[m]||this._magicMap[c])&&(e.series[n].__stack=e.series[n].stack)}this._magicType=t?{}:this._magicType||{};for(var r in this._magicType)if(this._magicType[r]){this.option=e,this.getMagicOption();break}var s=e.dataZoom;if(s&&s.show){var h=null!=s.start&&s.start>=0&&s.start<=100?s.start:0,d=null!=s.end&&s.end>=0&&s.end<=100?s.end:100;h>d&&(h+=d,d=h-d,h-=d),this._zoomQueue=[{start:h,end:d,start2:0,end2:100}]}else this._zoomQueue=[]},getMagicOption:function(){var e,t; +if(this._magicType[s.CHART_TYPE_LINE]||this._magicType[s.CHART_TYPE_BAR]){for(var i=this._magicType[s.CHART_TYPE_LINE]?!1:!0,n=0,a=this.option.series.length;a>n;n++)t=this.option.series[n].type,(t==s.CHART_TYPE_LINE||t==s.CHART_TYPE_BAR)&&(e=this.option.xAxis instanceof Array?this.option.xAxis[this.option.series[n].xAxisIndex||0]:this.option.xAxis,e&&"category"===(e.type||"category")&&(e.boundaryGap=i?!0:e.__boundaryGap),e=this.option.yAxis instanceof Array?this.option.yAxis[this.option.series[n].yAxisIndex||0]:this.option.yAxis,e&&"category"===e.type&&(e.boundaryGap=i?!0:e.__boundaryGap));this._defaultMagic(s.CHART_TYPE_LINE,s.CHART_TYPE_BAR)}if(this._defaultMagic(s.CHART_TYPE_CHORD,s.CHART_TYPE_FORCE),this._defaultMagic(s.CHART_TYPE_PIE,s.CHART_TYPE_FUNNEL),this._magicType[m]||this._magicType[c])for(var n=0,a=this.option.series.length;a>n;n++)this._magicType[m]?(this.option.series[n].stack="_ECHARTS_STACK_KENER_2014_",t=m):this._magicType[c]&&(this.option.series[n].stack=null,t=c),this._featureOption[t+"Chart"]&&l.merge(this.option.series[n],this._featureOption[t+"Chart"]||{},!0);return this.option},_defaultMagic:function(e,t){if(this._magicType[e]||this._magicType[t])for(var i=0,n=this.option.series.length;n>i;i++){var a=this.option.series[i].type;(a==e||a==t)&&(this.option.series[i].type=this._magicType[e]?e:t,this.option.series[i].itemStyle=l.clone(this.option.series[i].__itemStyle),a=this.option.series[i].type,this._featureOption[a+"Chart"]&&l.merge(this.option.series[i],this._featureOption[a+"Chart"]||{},!0))}},silence:function(e){this._isSilence=e},resize:function(){this._resetMark(),this.clear(),this.option&&this.option.toolbox&&this.option.toolbox.show&&this._buildShape(),this._dataView&&this._dataView.resize()},hideDataView:function(){this._dataView&&this._dataView.hide()},clear:function(e){this.zr&&(this.zr.delShape(this.shapeList),this.shapeList=[],e||(this.zr.delShape(this._markShapeList),this._markShapeList=[]))},onbeforDispose:function(){this._dataView&&(this._dataView.dispose(),this._dataView=null),this._markShapeList=null},refresh:function(e){e&&(this._resetMark(),this._resetZoom(),e.toolbox=this.reformOption(e.toolbox),this.option=e,this.clear(!0),e.toolbox.show&&this._buildShape(),this.hideDataView())}},l.inherits(t,i),e("../component").define("toolbox",t),t}),define("echarts/component",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),define("echarts/component/title",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../config"),r=e("zrender/tool/util"),s=e("zrender/tool/area"),l=e("zrender/tool/color");return t.prototype={type:o.COMPONENT_TYPE_TITLE,_buildShape:function(){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])},_buildItem:function(){var e=this.titleOption.text,t=this.titleOption.link,i=this.titleOption.target,a=this.titleOption.subtext,o=this.titleOption.sublink,r=this.titleOption.subtarget,s=this.getFont(this.titleOption.textStyle),h=this.getFont(this.titleOption.subtextStyle),d=this._itemGroupLocation.x,m=this._itemGroupLocation.y,c=this._itemGroupLocation.width,p=this._itemGroupLocation.height,u={zlevel:this._zlevelBase,style:{y:m,color:this.titleOption.textStyle.color,text:e,textFont:s,textBaseline:"top"},highlightStyle:{color:l.lift(this.titleOption.textStyle.color,1),brushType:"fill"},hoverable:!1};t&&(u.hoverable=!0,u.clickable=!0,u.onclick=function(){i&&"self"==i?window.location=t:window.open(t)});var V={zlevel:this._zlevelBase,style:{y:m+p,color:this.titleOption.subtextStyle.color,text:a,textFont:h,textBaseline:"bottom"},highlightStyle:{color:l.lift(this.titleOption.subtextStyle.color,1),brushType:"fill"},hoverable:!1};switch(o&&(V.hoverable=!0,V.clickable=!0,V.onclick=function(){r&&"self"==r?window.location=o:window.open(o)}),this.titleOption.x){case"center":u.style.x=V.style.x=d+c/2,u.style.textAlign=V.style.textAlign="center";break;case"left":u.style.x=V.style.x=d,u.style.textAlign=V.style.textAlign="left";break;case"right":u.style.x=V.style.x=d+c,u.style.textAlign=V.style.textAlign="right";break;default:d=this.titleOption.x-0,d=isNaN(d)?0:d,u.style.x=V.style.x=d}this.titleOption.textAlign&&(u.style.textAlign=V.style.textAlign=this.titleOption.textAlign),this.shapeList.push(new n(u)),""!==a&&this.shapeList.push(new n(V))},_buildBackground:function(){var e=this.reformCssArray(this.titleOption.padding);this.shapeList.push(new a({zlevel:this._zlevelBase,hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.titleOption.borderWidth?"fill":"both",color:this.titleOption.backgroundColor,strokeColor:this.titleOption.borderColor,lineWidth:this.titleOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.titleOption.padding),i=this.titleOption.text,n=this.titleOption.subtext,a=this.getFont(this.titleOption.textStyle),o=this.getFont(this.titleOption.subtextStyle),r=Math.max(s.getTextWidth(i,a),s.getTextWidth(n,o)),l=s.getTextHeight(i,a)+(""===n?0:this.titleOption.itemGap+s.getTextHeight(n,o)),h=this.zr.getWidth();switch(this.titleOption.x){case"center":e=Math.floor((h-r)/2);break;case"left":e=t[3]+this.titleOption.borderWidth;break;case"right":e=h-r-t[1]-this.titleOption.borderWidth;break;default:e=this.titleOption.x-0,e=isNaN(e)?0:e}var d,m=this.zr.getHeight();switch(this.titleOption.y){case"top":d=t[0]+this.titleOption.borderWidth;break;case"bottom":d=m-l-t[2]-this.titleOption.borderWidth;break;case"center":d=Math.floor((m-l)/2);break;default:d=this.titleOption.y-0,d=isNaN(d)?0:d}return{x:e,y:d,width:r,height:l}},refresh:function(e){e&&(this.option=e,this.option.title=this.reformOption(this.option.title),this.titleOption=this.option.title,this.titleOption.textStyle=r.merge(this.titleOption.textStyle,this.ecTheme.textStyle),this.titleOption.subtextStyle=r.merge(this.titleOption.subtextStyle,this.ecTheme.textStyle)),this.clear(),this._buildShape()}},r.inherits(t,i),e("../component").define("title",t),t}),define("echarts/component/tooltip",["require","./base","../util/shape/Cross","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/area","zrender/tool/color","zrender/tool/util","zrender/shape/Base","../component"],function(e){function t(e,t,o,r,s){i.call(this,e,t,o,r,s),this.dom=s.dom;var l=this;l._onmousemove=function(e){return l.__onmousemove(e)},l._onglobalout=function(e){return l.__onglobalout(e)},this.zr.on(h.EVENT.MOUSEMOVE,l._onmousemove),this.zr.on(h.EVENT.GLOBALOUT,l._onglobalout),l._hide=function(e){return l.__hide(e)},l._tryShow=function(e){return l.__tryShow(e)},l._refixed=function(e){return l.__refixed(e)},l._setContent=function(e,t){return l.__setContent(e,t)},this._tDom=this._tDom||document.createElement("div"),this._tDom.onselectstart=function(){return!1},this._tDom.onmouseover=function(){l._mousein=!0},this._tDom.onmouseout=function(){l._mousein=!1},this._tDom.style.position="absolute",this.hasAppend=!1,this._axisLineShape&&this.zr.delShape(this._axisLineShape.id),this._axisLineShape=new a({zlevel:this._zlevelBase,invisible:!0,hoverable:!1}),this.shapeList.push(this._axisLineShape),this.zr.addShape(this._axisLineShape),this._axisShadowShape&&this.zr.delShape(this._axisShadowShape.id),this._axisShadowShape=new a({zlevel:1,invisible:!0,hoverable:!1}),this.shapeList.push(this._axisShadowShape),this.zr.addShape(this._axisShadowShape),this._axisCrossShape&&this.zr.delShape(this._axisCrossShape.id),this._axisCrossShape=new n({zlevel:this._zlevelBase,invisible:!0,hoverable:!1}),this.shapeList.push(this._axisCrossShape),this.zr.addShape(this._axisCrossShape),this.showing=!1,this.refresh(r)}var i=e("./base"),n=e("../util/shape/Cross"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=new o({}),s=e("../config"),l=e("../util/ecData"),h=e("zrender/config"),d=e("zrender/tool/event"),m=e("zrender/tool/area"),c=e("zrender/tool/color"),p=e("zrender/tool/util"),u=e("zrender/shape/Base");return t.prototype={type:s.COMPONENT_TYPE_TOOLTIP,_gCssText:"position:absolute;display:block;border-style:solid;white-space:nowrap;",_style:function(e){if(!e)return"";var t=[];if(e.transitionDuration){var i="left "+e.transitionDuration+"s,top "+e.transitionDuration+"s";t.push("transition:"+i),t.push("-moz-transition:"+i),t.push("-webkit-transition:"+i),t.push("-o-transition:"+i)}e.backgroundColor&&(t.push("background-Color:"+c.toHex(e.backgroundColor)),t.push("filter:alpha(opacity=70)"),t.push("background-Color:"+e.backgroundColor)),null!=e.borderWidth&&t.push("border-width:"+e.borderWidth+"px"),null!=e.borderColor&&t.push("border-color:"+e.borderColor),null!=e.borderRadius&&(t.push("border-radius:"+e.borderRadius+"px"),t.push("-moz-border-radius:"+e.borderRadius+"px"),t.push("-webkit-border-radius:"+e.borderRadius+"px"),t.push("-o-border-radius:"+e.borderRadius+"px"));var n=e.textStyle;n&&(n.color&&t.push("color:"+n.color),n.decoration&&t.push("text-decoration:"+n.decoration),n.align&&t.push("text-align:"+n.align),n.fontFamily&&t.push("font-family:"+n.fontFamily),n.fontSize&&t.push("font-size:"+n.fontSize+"px"),n.fontSize&&t.push("line-height:"+Math.round(3*n.fontSize/2)+"px"),n.fontStyle&&t.push("font-style:"+n.fontStyle),n.fontWeight&&t.push("font-weight:"+n.fontWeight));var a=e.padding;return null!=a&&(a=this.reformCssArray(a),t.push("padding:"+a[0]+"px "+a[1]+"px "+a[2]+"px "+a[3]+"px")),t=t.join(";")+";"},__hide:function(){this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,this._tDom&&(this._tDom.style.display="none");var e=!1;this._axisLineShape.invisible||(this._axisLineShape.invisible=!0,this.zr.modShape(this._axisLineShape.id),e=!0),this._axisShadowShape.invisible||(this._axisShadowShape.invisible=!0,this.zr.modShape(this._axisShadowShape.id),e=!0),this._axisCrossShape.invisible||(this._axisCrossShape.invisible=!0,this.zr.modShape(this._axisCrossShape.id),e=!0),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2),e&&this.zr.refresh(),this.showing=!1},_show:function(e,t,i,n){var a=this._tDom.offsetHeight,o=this._tDom.offsetWidth;e&&("function"==typeof e&&(e=e([t,i])),e instanceof Array&&(t=e[0],i=e[1])),t+o>this._zrWidth&&(t-=o+40),i+a>this._zrHeight&&(i-=a-20),20>i&&(i=0),this._tDom.style.cssText=this._gCssText+this._defaultCssText+(n?n:"")+"left:"+t+"px;top:"+i+"px;",(10>a||10>o)&&setTimeout(this._refixed,20),this.showing=!0},__refixed:function(){if(this._tDom){var e="",t=this._tDom.offsetHeight,i=this._tDom.offsetWidth;this._tDom.offsetLeft+i>this._zrWidth&&(e+="left:"+(this._zrWidth-i-20)+"px;"),this._tDom.offsetTop+t>this._zrHeight&&(e+="top:"+(this._zrHeight-t-10)+"px;"),""!==e&&(this._tDom.style.cssText+=e)}},__tryShow:function(){var e,t;if(this._curTarget){if("island"===this._curTarget._type&&this.option.tooltip.show)return void this._showItemTrigger();var i=l.get(this._curTarget,"series"),n=l.get(this._curTarget,"data");e=this.deepQuery([n,i,this.option],"tooltip.show"),null!=i&&null!=n&&e?(t=this.deepQuery([n,i,this.option],"tooltip.trigger"),"axis"===t?this._showAxisTrigger(i.xAxisIndex,i.yAxisIndex,l.get(this._curTarget,"dataIndex")):this._showItemTrigger()):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}else this._findPolarTrigger()||this._findAxisTrigger()},_findAxisTrigger:function(){if(!this.component.xAxis||!this.component.yAxis)return void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));for(var e,t,i=this.option.series,n=0,a=i.length;a>n;n++)if("axis"===this.deepQuery([i[n],this.option],"tooltip.trigger"))return e=i[n].xAxisIndex||0,t=i[n].yAxisIndex||0,this.component.xAxis.getAxis(e)&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("x",this.component.xAxis.getAxis(e))):this.component.yAxis.getAxis(t)&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("y",this.component.yAxis.getAxis(t))):void this._showAxisTrigger(e,t,-1);"cross"===this.option.tooltip.axisPointer.type&&this._showAxisTrigger(-1,-1,-1)},_findPolarTrigger:function(){if(!this.component.polar)return!1;var e,t=d.getX(this._event),i=d.getY(this._event),n=this.component.polar.getNearestIndex([t,i]);return n?(e=n.valueIndex,n=n.polarIndex):n=-1,-1!=n?this._showPolarTrigger(n,e):!1},_getNearestDataIndex:function(e,t){var i=-1,n=d.getX(this._event),a=d.getY(this._event);if("x"===e){for(var o,r,s=this.component.grid.getXend(),l=t.getCoordByIndex(i);s>l&&(r=l,n>=l);)o=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:r-n>=n-o?i-=1:null==t.getNameByIndex(i)&&(i-=1),i}for(var h,m,c=this.component.grid.getY(),l=t.getCoordByIndex(i);l>c&&(h=l,l>=a);)m=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:a-h>=m-a?i-=1:null==t.getNameByIndex(i)&&(i-=1),i},_showAxisTrigger:function(e,t,i){if(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_IN_GRID,this._event,null,this.myChart),null==this.component.xAxis||null==this.component.yAxis||null==e||null==t)return clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));var n,a,o,r,l=this.option.series,h=[],m=[],c="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return;a=this.option.tooltip.formatter,o=this.option.tooltip.position}var p,u,V=-1!=e&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"xAxis":-1!=t&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"yAxis":!1;if(V){var U="xAxis"==V?e:t;n=this.component[V].getAxis(U);for(var y=0,g=l.length;g>y;y++)this._isSelected(l[y].name)&&l[y][V+"Index"]===U&&"axis"===this.deepQuery([l[y],this.option],"tooltip.trigger")&&(r=this.query(l[y],"tooltip.showContent")||r,a=this.query(l[y],"tooltip.formatter")||a,o=this.query(l[y],"tooltip.position")||o,c+=this._style(this.query(l[y],"tooltip")),null!=l[y].stack&&"xAxis"==V?(h.unshift(l[y]),m.unshift(y)):(h.push(l[y]),m.push(y)));this.messageCenter.dispatch(s.EVENT.TOOLTIP_HOVER,this._event,{seriesIndex:m,dataIndex:i},this.myChart);var f;"xAxis"==V?(p=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),u=d.getY(this._event),f=[p,this.component.grid.getY(),p,this.component.grid.getYend()]):(p=d.getX(this._event),u=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),f=[this.component.grid.getX(),u,this.component.grid.getXend(),u]),this._styleAxisPointer(h,f[0],f[1],f[2],f[3],n.getGap(),p,u)}else p=d.getX(this._event),u=d.getY(this._event),this._styleAxisPointer(l,this.component.grid.getX(),u,this.component.grid.getXend(),u,0,p,u),i>=0?this._showItemTrigger(!0):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._tDom.style.display="none");if(h.length>0){if(this._lastDataIndex!=i||this._lastSeriesIndex!=m[0]){this._lastDataIndex=i,this._lastSeriesIndex=m[0];var b,_;if("function"==typeof a){for(var x=[],y=0,g=h.length;g>y;y++)b=h[y].data[i],_=null!=b?null!=b.value?b.value:b:"-",x.push({seriesIndex:m[y],seriesName:h[y].name||"",series:h[y],dataIndex:i,data:b,name:n.getNameByIndex(i),value:_,0:h[y].name||"",1:n.getNameByIndex(i),2:_,3:b});this._curTicket="axis:"+i,this._tDom.innerHTML=a.call(this.myChart,x,this._curTicket,this._setContent)}else if("string"==typeof a){this._curTicket=0/0,a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}");for(var y=0,g=h.length;g>y;y++)a=a.replace("{a"+y+"}",this._encodeHTML(h[y].name||"")),a=a.replace("{b"+y+"}",this._encodeHTML(n.getNameByIndex(i))),b=h[y].data[i],b=null!=b?null!=b.value?b.value:b:"-",a=a.replace("{c"+y+"}",b instanceof Array?b:this.numAddCommas(b));this._tDom.innerHTML=a}else{this._curTicket=0/0,a=this._encodeHTML(n.getNameByIndex(i));for(var y=0,g=h.length;g>y;y++)a+="
"+this._encodeHTML(h[y].name||"")+" : ",b=h[y].data[i],b=null!=b?null!=b.value?b.value:b:"-",a+=b instanceof Array?b:this.numAddCommas(b);this._tDom.innerHTML=a}}if(r===!1||!this.option.tooltip.showContent)return;this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(o,p+10,u+10,c)}},_showPolarTrigger:function(e,t){if(null==this.component.polar||null==e||null==t||0>t)return!1;var i,n,a,o=this.option.series,r=[],s=[],l="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return!1;i=this.option.tooltip.formatter,n=this.option.tooltip.position}for(var h=this.option.polar[e].indicator[t].text,m=0,c=o.length;c>m;m++)this._isSelected(o[m].name)&&o[m].polarIndex===e&&"axis"===this.deepQuery([o[m],this.option],"tooltip.trigger")&&(a=this.query(o[m],"tooltip.showContent")||a,i=this.query(o[m],"tooltip.formatter")||i,n=this.query(o[m],"tooltip.position")||n,l+=this._style(this.query(o[m],"tooltip")),r.push(o[m]),s.push(m));if(r.length>0){for(var p,u,V,U=[],m=0,c=r.length;c>m;m++){p=r[m].data;for(var y=0,g=p.length;g>y;y++)u=p[y],this._isSelected(u.name)&&(u=null!=u?u:{name:"",value:{dataIndex:"-"}},V=null!=u.value[t].value?u.value[t].value:u.value[t],U.push({seriesIndex:s[m],seriesName:r[m].name||"",series:r[m],dataIndex:t,data:u,name:u.name,indicator:h,value:V,0:r[m].name||"",1:u.name,2:V,3:h}))}if(U.length<=0)return;if(this._lastDataIndex!=t||this._lastSeriesIndex!=s[0])if(this._lastDataIndex=t,this._lastSeriesIndex=s[0],"function"==typeof i)this._curTicket="axis:"+t,this._tDom.innerHTML=i.call(this.myChart,U,this._curTicket,this._setContent);else if("string"==typeof i){i=i.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}");for(var m=0,c=U.length;c>m;m++)i=i.replace("{a"+m+"}",this._encodeHTML(U[m].seriesName)),i=i.replace("{b"+m+"}",this._encodeHTML(U[m].name)),i=i.replace("{c"+m+"}",this.numAddCommas(U[m].value)),i=i.replace("{d"+m+"}",this._encodeHTML(U[m].indicator));this._tDom.innerHTML=i}else{i=this._encodeHTML(U[0].name)+"
"+this._encodeHTML(U[0].indicator)+" : "+this.numAddCommas(U[0].value);for(var m=1,c=U.length;c>m;m++)i+="
"+this._encodeHTML(U[m].name)+"
",i+=this._encodeHTML(U[m].indicator)+" : "+this.numAddCommas(U[m].value);this._tDom.innerHTML=i}if(a===!1||!this.option.tooltip.showContent)return;return this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(n,d.getX(this._event),d.getY(this._event),l),!0}},_showItemTrigger:function(e){if(this._curTarget){var t,i,n,a=l.get(this._curTarget,"series"),o=l.get(this._curTarget,"seriesIndex"),r=l.get(this._curTarget,"data"),h=l.get(this._curTarget,"dataIndex"),m=l.get(this._curTarget,"name"),c=l.get(this._curTarget,"value"),p=l.get(this._curTarget,"special"),u=l.get(this._curTarget,"special2"),V="";if("island"!=this._curTarget._type){var U=e?"axis":"item";this.option.tooltip.trigger===U&&(t=this.option.tooltip.formatter,i=this.option.tooltip.position),this.query(a,"tooltip.trigger")===U&&(n=this.query(a,"tooltip.showContent")||n,t=this.query(a,"tooltip.formatter")||t,i=this.query(a,"tooltip.position")||i,V+=this._style(this.query(a,"tooltip"))),n=this.query(r,"tooltip.showContent")||n,t=this.query(r,"tooltip.formatter")||t,i=this.query(r,"tooltip.position")||i,V+=this._style(this.query(r,"tooltip"))}else this._lastItemTriggerId=0/0,n=this.deepQuery([r,a,this.option],"tooltip.showContent"),t=this.deepQuery([r,a,this.option],"tooltip.islandFormatter"),i=this.deepQuery([r,a,this.option],"tooltip.islandPosition");this._lastItemTriggerId!==this._curTarget.id&&(this._lastItemTriggerId=this._curTarget.id,"function"==typeof t?(this._curTicket=(a.name||"")+":"+h,this._tDom.innerHTML=t.call(this.myChart,{seriesIndex:o,seriesName:a.name||"",series:a,dataIndex:h,data:r,name:m,value:c,percent:p,indicator:p,value2:u,indicator2:u,0:a.name||"",1:m,2:c,3:p,4:u,5:r,6:o,7:h},this._curTicket,this._setContent)):"string"==typeof t?(this._curTicket=0/0,t=t.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),t=t.replace("{a0}",this._encodeHTML(a.name||"")).replace("{b0}",this._encodeHTML(m)).replace("{c0}",c instanceof Array?c:this.numAddCommas(c)),t=t.replace("{d}","{d0}").replace("{d0}",p||""),t=t.replace("{e}","{e0}").replace("{e0}",l.get(this._curTarget,"special2")||""),this._tDom.innerHTML=t):(this._curTicket=0/0,this._tDom.innerHTML=a.type===s.CHART_TYPE_RADAR&&p?this._itemFormatter.radar.call(this,a,m,c,p):a.type===s.CHART_TYPE_EVENTRIVER?this._itemFormatter.eventRiver.call(this,a,m,c,r):""+(null!=a.name?this._encodeHTML(a.name)+"
":"")+(""===m?"":this._encodeHTML(m)+" : ")+(c instanceof Array?c:this.numAddCommas(c)))),this._axisLineShape.invisible&&this._axisShadowShape.invisible||(this._axisLineShape.invisible=!0,this.zr.modShape(this._axisLineShape.id),this._axisShadowShape.invisible=!0,this.zr.modShape(this._axisShadowShape.id),this.zr.refresh()),n!==!1&&this.option.tooltip.showContent&&(this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(i,d.getX(this._event)+20,d.getY(this._event)-20,V))}},_itemFormatter:{radar:function(e,t,i,n){var a="";a+=this._encodeHTML(""===t?e.name||"":t),a+=""===a?"":"
";for(var o=0;o";return a},chord:function(e,t,i,n,a){if(null==a)return this._encodeHTML(t)+" ("+this.numAddCommas(i)+")";var o=this._encodeHTML(t),r=this._encodeHTML(n);return""+(null!=e.name?this._encodeHTML(e.name)+"
":"")+o+" -> "+r+" ("+this.numAddCommas(i)+")
"+r+" -> "+o+" ("+this.numAddCommas(a)+")"},eventRiver:function(e,t,i,n){var a="";a+=this._encodeHTML(""===e.name?"":e.name+" : "),a+=this._encodeHTML(t),a+=""===a?"":"
",n=n.evolution;for(var o=0,r=n.length;r>o;o++)a+='
',n[o].detail&&(n[o].detail.img&&(a+=''),a+='
'+n[o].time+"
",a+='',a+=n[o].detail.text+"
",a+="
");return a}},_styleAxisPointer:function(e,t,i,n,a,o,r,s){if(e.length>0){var l,h,d=this.option.tooltip.axisPointer,m=d.type,c={line:{},cross:{},shadow:{}};for(var p in c)c[p].color=d[p+"Style"].color,c[p].width=d[p+"Style"].width,c[p].type=d[p+"Style"].type;for(var u=0,V=e.length;V>u;u++)"axis"===this.deepQuery([e[u],this.option],"tooltip.trigger")&&(l=e[u],h=this.query(l,"tooltip.axisPointer.type"),m=h||m,h&&(c[h].color=this.query(l,"tooltip.axisPointer."+h+"Style.color")||c[h].color,c[h].width=this.query(l,"tooltip.axisPointer."+h+"Style.width")||c[h].width,c[h].type=this.query(l,"tooltip.axisPointer."+h+"Style.type")||c[h].type));"line"===m?(this._axisLineShape.style={xStart:t,yStart:i,xEnd:n,yEnd:a,strokeColor:c.line.color,lineWidth:c.line.width,lineType:c.line.type},this._axisLineShape.invisible=!1,this.zr.modShape(this._axisLineShape.id)):"cross"===m?(this._axisCrossShape.style={brushType:"stroke",rect:this.component.grid.getArea(),x:r,y:s,text:("( "+this.component.xAxis.getAxis(0).getValueFromCoord(r)+" , "+this.component.yAxis.getAxis(0).getValueFromCoord(s)+" )").replace(" , "," ").replace(" , "," "),textPosition:"specific",strokeColor:c.cross.color,lineWidth:c.cross.width,lineType:c.cross.type},this.component.grid.getXend()-r>100?(this._axisCrossShape.style.textAlign="left",this._axisCrossShape.style.textX=r+10):(this._axisCrossShape.style.textAlign="right",this._axisCrossShape.style.textX=r-10),s-this.component.grid.getY()>50?(this._axisCrossShape.style.textBaseline="bottom",this._axisCrossShape.style.textY=s-10):(this._axisCrossShape.style.textBaseline="top",this._axisCrossShape.style.textY=s+10),this._axisCrossShape.invisible=!1,this.zr.modShape(this._axisCrossShape.id)):"shadow"===m&&((null==c.shadow.width||"auto"===c.shadow.width||isNaN(c.shadow.width))&&(c.shadow.width=o),t===n?Math.abs(this.component.grid.getX()-t)<2?(c.shadow.width/=2,t=n+=c.shadow.width/2):Math.abs(this.component.grid.getXend()-t)<2&&(c.shadow.width/=2,t=n-=c.shadow.width/2):i===a&&(Math.abs(this.component.grid.getY()-i)<2?(c.shadow.width/=2,i=a+=c.shadow.width/2):Math.abs(this.component.grid.getYend()-i)<2&&(c.shadow.width/=2,i=a-=c.shadow.width/2)),this._axisShadowShape.style={xStart:t,yStart:i,xEnd:n,yEnd:a,strokeColor:c.shadow.color,lineWidth:c.shadow.width},this._axisShadowShape.invisible=!1,this.zr.modShape(this._axisShadowShape.id)),this.zr.refresh()}},__onmousemove:function(e){if(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),!this._mousein||!this._enterable){var t=e.target,i=d.getX(e.event),n=d.getY(e.event);if(t){this._curTarget=t,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n;var a;if(this._needAxisTrigger&&this.component.polar&&-1!=(a=this.component.polar.isInside([i,n])))for(var o=this.option.series,l=0,h=o.length;h>l;l++)if(o[l].polarIndex===a&&"axis"===this.deepQuery([o[l],this.option],"tooltip.trigger")){this._curTarget=null;break}this._showingTicket=setTimeout(this._tryShow,this._showDelay)}else this._curTarget=!1,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n,this._needAxisTrigger&&this.component.grid&&m.isInside(r,this.component.grid.getArea(),i,n)?this._showingTicket=setTimeout(this._tryShow,this._showDelay):this._needAxisTrigger&&this.component.polar&&-1!=this.component.polar.isInside([i,n])?this._showingTicket=setTimeout(this._tryShow,this._showDelay):(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_OUT_GRID,this._event,null,this.myChart),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}},__onglobalout:function(){clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay)},__setContent:function(e,t){this._tDom&&(e===this._curTicket&&(this._tDom.innerHTML=t),setTimeout(this._refixed,20))},ontooltipHover:function(e,t){if(!this._lastTipShape||this._lastTipShape&&this._lastTipShape.dataIndex!=e.dataIndex){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this.shapeList.length=2);for(var i=0,n=t.length;n>i;i++)t[i].zlevel=this._zlevelBase,t[i].style=u.prototype.getHighlightStyle(t[i].style,t[i].highlightStyle),t[i].draggable=!1,t[i].hoverable=!1,t[i].clickable=!1,t[i].ondragend=null,t[i].ondragover=null,t[i].ondrop=null,this.shapeList.push(t[i]),this.zr.addShape(t[i]);this._lastTipShape={dataIndex:e.dataIndex,tipShape:t}}},ondragend:function(){this._hide()},onlegendSelected:function(e){this._selectedMap=e.selected},_setSelectedMap:function(){this._selectedMap=this.component.legend?p.clone(this.component.legend.getSelectedMap()):{}},_isSelected:function(e){return null!=this._selectedMap[e]?this._selectedMap[e]:!0},showTip:function(e){if(e){var t,i=this.option.series;if(null!=e.seriesIndex)t=e.seriesIndex;else for(var n=e.seriesName,a=0,o=i.length;o>a;a++)if(i[a].name===n){t=a;break}var r=i[t];if(null!=r){var d=this.myChart.chart[r.type],m="axis"===this.deepQuery([r,this.option],"tooltip.trigger");if(d)if(m){var c=e.dataIndex;switch(d.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:if(null==this.component.xAxis||null==this.component.yAxis||r.data.length<=c)return;var p=r.xAxisIndex||0,u=r.yAxisIndex||0;this._event=this.component.xAxis.getAxis(p).type===s.COMPONENT_TYPE_AXIS_CATEGORY?{zrenderX:this.component.xAxis.getAxis(p).getCoordByIndex(c),zrenderY:this.component.grid.getY()+(this.component.grid.getYend()-this.component.grid.getY())/4}:{zrenderX:this.component.grid.getX()+(this.component.grid.getXend()-this.component.grid.getX())/4,zrenderY:this.component.yAxis.getAxis(u).getCoordByIndex(c)},this._showAxisTrigger(p,u,c);break;case s.CHART_TYPE_RADAR:if(null==this.component.polar||r.data[0].value.length<=c)return;var V=r.polarIndex||0,U=this.component.polar.getVector(V,c,"max");this._event={zrenderX:U[0],zrenderY:U[1]},this._showPolarTrigger(V,c)}}else{var y,g,f=d.shapeList;switch(d.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_SCATTER:for(var c=e.dataIndex,a=0,o=f.length;o>a;a++)if(l.get(f[a],"seriesIndex")==t&&l.get(f[a],"dataIndex")==c){this._curTarget=f[a],y=f[a].style.x,g=d.type!=s.CHART_TYPE_K?f[a].style.y:f[a].style.y[0];break}break;case s.CHART_TYPE_RADAR:for(var c=e.dataIndex,a=0,o=f.length;o>a;a++)if("polygon"===f[a].type&&l.get(f[a],"seriesIndex")==t&&l.get(f[a],"dataIndex")==c){this._curTarget=f[a];var U=this.component.polar.getCenter(r.polarIndex||0);y=U[0],g=U[1];break}break;case s.CHART_TYPE_PIE:for(var b=e.name,a=0,o=f.length;o>a;a++)if("sector"===f[a].type&&l.get(f[a],"seriesIndex")==t&&l.get(f[a],"name")==b){this._curTarget=f[a];var _=this._curTarget.style,x=(_.startAngle+_.endAngle)/2*Math.PI/180;y=this._curTarget.style.x+Math.cos(x)*_.r/1.5,g=this._curTarget.style.y-Math.sin(x)*_.r/1.5;break}break;case s.CHART_TYPE_MAP:for(var b=e.name,k=r.mapType,a=0,o=f.length;o>a;a++)if("text"===f[a].type&&f[a]._mapType===k&&f[a].style._name===b){this._curTarget=f[a],y=this._curTarget.style.x+this._curTarget.position[0],g=this._curTarget.style.y+this._curTarget.position[1];break}break;case s.CHART_TYPE_CHORD:for(var b=e.name,a=0,o=f.length;o>a;a++)if("sector"===f[a].type&&l.get(f[a],"name")==b){this._curTarget=f[a];var _=this._curTarget.style,x=(_.startAngle+_.endAngle)/2*Math.PI/180;return y=this._curTarget.style.x+Math.cos(x)*(_.r-2),g=this._curTarget.style.y-Math.sin(x)*(_.r-2),void this.zr.trigger(h.EVENT.MOUSEMOVE,{zrenderX:y,zrenderY:g})}break;case s.CHART_TYPE_FORCE:for(var b=e.name,a=0,o=f.length;o>a;a++)if("circle"===f[a].type&&l.get(f[a],"name")==b){this._curTarget=f[a],y=this._curTarget.position[0],g=this._curTarget.position[1];break}}null!=y&&null!=g&&(this._event={zrenderX:y,zrenderY:g},this.zr.addHoverShape(this._curTarget),this.zr.refreshHover(),this._showItemTrigger())}}}},hideTip:function(){this._hide()},refresh:function(e){if(this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2,this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,e){this.option=e,this.option.tooltip=this.reformOption(this.option.tooltip),this.option.tooltip.textStyle=p.merge(this.option.tooltip.textStyle,this.ecTheme.textStyle),this._needAxisTrigger=!1,"axis"===this.option.tooltip.trigger&&(this._needAxisTrigger=!0);for(var t=this.option.series,i=0,n=t.length;n>i;i++)if("axis"===this.query(t[i],"tooltip.trigger")){this._needAxisTrigger=!0;break}this._showDelay=this.option.tooltip.showDelay,this._hideDelay=this.option.tooltip.hideDelay,this._defaultCssText=this._style(this.option.tooltip),this._setSelectedMap(),this._axisLineWidth=this.option.tooltip.axisPointer.lineStyle.width,this._enterable=this.option.tooltip.enterable}if(this.showing){var a=this;setTimeout(function(){a.zr.trigger(h.EVENT.MOUSEMOVE,a.zr.handler._event)},50)}},onbeforDispose:function(){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove),this.zr.un(h.EVENT.GLOBALOUT,this._onglobalout),this.hasAppend&&this.dom.firstChild.removeChild(this._tDom),this._tDom=null +},_encodeHTML:function(e){return String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}},p.inherits(t,i),e("../component").define("tooltip",t),t}),define("echarts/component/legend",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","zrender/shape/Sector","../util/shape/Icon","../util/shape/Candle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o){if(!this.query(a,"legend.data"))return void console.error("option.legend.data has not been defined.");i.call(this,e,t,n,a,o);var r=this;r._legendSelected=function(e){r.__legendSelected(e)},r._dispatchHoverLink=function(e){return r.__dispatchHoverLink(e)},this._colorIndex=0,this._colorMap={},this._selectedMap={},this._hasDataMap={},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Sector"),r=e("../util/shape/Icon"),s=e("../util/shape/Candle"),l=e("../config"),h=e("zrender/tool/util"),d=e("zrender/tool/area");t.prototype={type:l.COMPONENT_TYPE_LEGEND,_buildShape:function(){if(this.legendOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e,t,i,a,o,s,l,m,c=this.legendOption.data,p=c.length,u=this.legendOption.textStyle,V=this.zr.getWidth(),U=this.zr.getHeight(),y=this._itemGroupLocation.x,g=this._itemGroupLocation.y,f=this.legendOption.itemWidth,b=this.legendOption.itemHeight,_=this.legendOption.itemGap;"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(y=this._itemGroupLocation.x+this._itemGroupLocation.width-f);for(var x=0;p>x;x++)o=h.merge(c[x].textStyle||{},u),s=this.getFont(o),e=this._getName(c[x]),l=this._getFormatterName(e),""!==e?(t=c[x].icon||this._getSomethingByName(e).type,m=this.getColor(e),"horizontal"===this.legendOption.orient?200>V-y&&f+5+d.getTextWidth(l,s)+(x===p-1||""===c[x+1]?0:_)>=V-y&&(y=this._itemGroupLocation.x,g+=b+_):200>U-g&&b+(x===p-1||""===c[x+1]?0:_)>=U-g&&("right"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+_:y+=this._itemGroupLocation.maxWidth+_,g=this._itemGroupLocation.y),i=this._getItemShapeByType(y,g,f,b,this._selectedMap[e]&&this._hasDataMap[e]?m:"#ccc",t,m),i._name=e,i=new r(i),a={zlevel:this._zlevelBase,style:{x:y+f+5,y:g+b/2,color:this._selectedMap[e]?"auto"===o.color?m:o.color:"#ccc",text:l,textFont:s,textBaseline:"middle"},highlightStyle:{color:m,brushType:"fill"},hoverable:!!this.legendOption.selectedMode,clickable:!!this.legendOption.selectedMode},"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(a.style.x-=f+10,a.style.textAlign="right"),a._name=e,a=new n(a),this.legendOption.selectedMode&&(i.onclick=a.onclick=this._legendSelected,i.onmouseover=a.onmouseover=this._dispatchHoverLink,i.hoverConnect=a.id,a.hoverConnect=i.id),this.shapeList.push(i),this.shapeList.push(a),"horizontal"===this.legendOption.orient?y+=f+5+d.getTextWidth(l,s)+_:g+=b+_):"horizontal"===this.legendOption.orient?(y=this._itemGroupLocation.x,g+=b+_):("right"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+_:y+=this._itemGroupLocation.maxWidth+_,g=this._itemGroupLocation.y);"horizontal"===this.legendOption.orient&&"center"===this.legendOption.x&&g!=this._itemGroupLocation.y&&this._mLineOptimize()},_getName:function(e){return"undefined"!=typeof e.name?e.name:e},_getFormatterName:function(e){var t,i=this.legendOption.formatter;return t="function"==typeof i?i.call(this.myChart,e):"string"==typeof i?i.replace("{name}",e):e},_getFormatterNameFromData:function(e){var t=this._getName(e);return this._getFormatterName(t)},_mLineOptimize:function(){for(var e=[],t=this._itemGroupLocation.x,i=2,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t?e.push((this._itemGroupLocation.width-(this.shapeList[i-1].style.x+d.getTextWidth(this.shapeList[i-1].style.text,this.shapeList[i-1].style.textFont)-t))/2):i===n-1&&e.push((this._itemGroupLocation.width-(this.shapeList[i].style.x+d.getTextWidth(this.shapeList[i].style.text,this.shapeList[i].style.textFont)-t))/2);for(var a=-1,i=1,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t&&a++,0!==e[a]&&(this.shapeList[i].style.x+=e[a])},_buildBackground:function(){var e=this.reformCssArray(this.legendOption.padding);this.shapeList.push(new a({zlevel:this._zlevelBase,hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.legendOption.borderWidth?"fill":"both",color:this.legendOption.backgroundColor,strokeColor:this.legendOption.borderColor,lineWidth:this.legendOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this.legendOption.data,t=e.length,i=this.legendOption.itemGap,n=this.legendOption.itemWidth+5,a=this.legendOption.itemHeight,o=this.legendOption.textStyle,r=this.getFont(o),s=0,l=0,m=this.reformCssArray(this.legendOption.padding),c=this.zr.getWidth()-m[1]-m[3],p=this.zr.getHeight()-m[0]-m[2],u=0,V=0;if("horizontal"===this.legendOption.orient){l=a;for(var U=0;t>U;U++)""!==this._getName(e[U])?u+=n+d.getTextWidth(this._getFormatterNameFromData(e[U]),e[U].textStyle?this.getFont(h.merge(e[U].textStyle||{},o)):r)+i:(u-=i,u>c?(s=c,l+=a+i):s=Math.max(s,u),l+=a+i,u=0);l=Math.max(l,a),u-=i,u>c?(s=c,l+=a+i):s=Math.max(s,u)}else{for(var U=0;t>U;U++)V=Math.max(V,d.getTextWidth(this._getFormatterNameFromData(e[U]),e[U].textStyle?this.getFont(h.merge(e[U].textStyle||{},o)):r));V+=n,s=V;for(var U=0;t>U;U++)""!==this._getName(e[U])?u+=a+i:(u-=i,u>p?(l=p,s+=V+i):l=Math.max(l,u),s+=V+i,u=0);s=Math.max(s,V),u-=i,u>p?(l=p,s+=V+i):l=Math.max(l,u)}c=this.zr.getWidth(),p=this.zr.getHeight();var y;switch(this.legendOption.x){case"center":y=Math.floor((c-s)/2);break;case"left":y=m[3]+this.legendOption.borderWidth;break;case"right":y=c-s-m[1]-m[3]-2*this.legendOption.borderWidth;break;default:y=this.parsePercent(this.legendOption.x,c)}var g;switch(this.legendOption.y){case"top":g=m[0]+this.legendOption.borderWidth;break;case"bottom":g=p-l-m[0]-m[2]-2*this.legendOption.borderWidth;break;case"center":g=Math.floor((p-l)/2);break;default:g=this.parsePercent(this.legendOption.y,p)}return{x:y,y:g,width:s,height:l,maxWidth:V}},_getSomethingByName:function(e){for(var t,i=this.option.series,n=0,a=i.length;a>n;n++){if(i[n].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:null,dataIndex:-1};if(i[n].type===l.CHART_TYPE_PIE||i[n].type===l.CHART_TYPE_RADAR||i[n].type===l.CHART_TYPE_CHORD||i[n].type===l.CHART_TYPE_FORCE||i[n].type===l.CHART_TYPE_FUNNEL){t=i[n].categories||i[n].data||i[n].nodes;for(var o=0,r=t.length;r>o;o++)if(t[o].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:t[o],dataIndex:o}}}return{type:"bar",series:null,seriesIndex:-1,data:null,dataIndex:-1}},_getItemShapeByType:function(e,t,i,n,a,o,r){var s,l="#ccc"===a?r:a,h={zlevel:this._zlevelBase,style:{iconType:"legendicon"+o,x:e,y:t,width:i,height:n,color:a,strokeColor:a,lineWidth:2},highlightStyle:{color:l,strokeColor:l,lineWidth:1},hoverable:this.legendOption.selectedMode,clickable:this.legendOption.selectedMode};if(o.match("image")){var s=o.replace(new RegExp("^image:\\/\\/"),"");o="image"}switch(o){case"line":h.style.brushType="stroke",h.highlightStyle.lineWidth=3;break;case"radar":case"scatter":h.highlightStyle.lineWidth=3;break;case"k":h.style.brushType="both",h.highlightStyle.lineWidth=3,h.highlightStyle.color=h.style.color=this.query(this.ecTheme,"k.itemStyle.normal.color")||"#fff",h.style.strokeColor="#ccc"!=a?this.query(this.ecTheme,"k.itemStyle.normal.lineStyle.color")||"#ff3200":a;break;case"image":h.style.iconType="image",h.style.image=s,"#ccc"===a&&(h.style.opacity=.5)}return h},__legendSelected:function(e){var t=e.target._name;if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[t]=!this._selectedMap[t],this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,e.event,{selected:this._selectedMap,target:t},this.myChart)},__dispatchHoverLink:function(e){this.messageCenter.dispatch(l.EVENT.LEGEND_HOVERLINK,e.event,{target:e.target._name},this.myChart)},refresh:function(e){if(e){this.option=e||this.option,this.option.legend=this.reformOption(this.option.legend),this.legendOption=this.option.legend;var t,i,n,a,o=this.legendOption.data||[];if(this.legendOption.selected)for(var r in this.legendOption.selected)this._selectedMap[r]="undefined"!=typeof this._selectedMap[r]?this._selectedMap[r]:this.legendOption.selected[r];for(var s=0,h=o.length;h>s;s++)t=this._getName(o[s]),""!==t&&(i=this._getSomethingByName(t),i.series?(this._hasDataMap[t]=!0,a=!i.data||i.type!==l.CHART_TYPE_PIE&&i.type!==l.CHART_TYPE_FORCE&&i.type!==l.CHART_TYPE_FUNNEL?[i.series]:[i.data,i.series],n=this.getItemStyleColor(this.deepQuery(a,"itemStyle.normal.color"),i.seriesIndex,i.dataIndex,i.data),n&&i.type!=l.CHART_TYPE_K&&this.setColor(t,n),this._selectedMap[t]=null!=this._selectedMap[t]?this._selectedMap[t]:!0):this._hasDataMap[t]=!1)}this.clear(),this._buildShape()},getRelatedAmount:function(e){for(var t,i=0,n=this.option.series,a=0,o=n.length;o>a;a++)if(n[a].name===e&&i++,n[a].type===l.CHART_TYPE_PIE||n[a].type===l.CHART_TYPE_RADAR||n[a].type===l.CHART_TYPE_CHORD||n[a].type===l.CHART_TYPE_FORCE||n[a].type===l.CHART_TYPE_FUNNEL){t=n[a].type!=l.CHART_TYPE_FORCE?n[a].data:n[a].categories;for(var r=0,s=t.length;s>r;r++)t[r].name===e&&"-"!=t[r].value&&i++}return i},setColor:function(e,t){this._colorMap[e]=t},getColor:function(e){return this._colorMap[e]||(this._colorMap[e]=this.zr.getColor(this._colorIndex++)),this._colorMap[e]},hasColor:function(e){return this._colorMap[e]?this._colorMap[e]:!1},add:function(e,t){for(var i=this.legendOption.data,n=0,a=i.length;a>n;n++)if(this._getName(i[n])===e)return;this.legendOption.data.push(e),this.setColor(e,t),this._selectedMap[e]=!0,this._hasDataMap[e]=!0},del:function(e){for(var t=this.legendOption.data,i=0,n=t.length;n>i;i++)if(this._getName(t[i])===e)return this.legendOption.data.splice(i,1)},getItemShape:function(e){if(null!=e)for(var t,i=0,n=this.shapeList.length;n>i;i++)if(t=this.shapeList[i],t._name===e&&"text"!=t.type)return t},setItemShape:function(e,t){for(var i,n=0,a=this.shapeList.length;a>n;n++)i=this.shapeList[n],i._name===e&&"text"!=i.type&&(this._selectedMap[e]||(t.style.color="#ccc",t.style.strokeColor="#ccc"),this.zr.modShape(i.id,t))},isSelected:function(e){return"undefined"!=typeof this._selectedMap[e]?this._selectedMap[e]:!0},getSelectedMap:function(){return this._selectedMap},setSelected:function(e,t){if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[e]=t,this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,null,{selected:this._selectedMap,target:e},this.myChart)},onlegendSelected:function(e,t){var i=e.selected;for(var n in i)this._selectedMap[n]!=i[n]&&(t.needRefresh=!0),this._selectedMap[n]=i[n]}};var m={line:function(e,t){var i=t.height/2;e.moveTo(t.x,t.y+i),e.lineTo(t.x+t.width,t.y+i)},pie:function(e,t){var i=t.x,n=t.y,a=t.width,r=t.height;o.prototype.buildPath(e,{x:i+a/2,y:n+r+2,r:r+2,r0:6,startAngle:45,endAngle:135})},eventRiver:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o),e.bezierCurveTo(i+a,n+o,i,n+4,i+a,n+4),e.lineTo(i+a,n),e.bezierCurveTo(i,n,i+a,n+o-4,i,n+o-4),e.lineTo(i,n+o)},k:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;s.prototype.buildPath(e,{x:i+a/2,y:[n+1,n+1,n+o-6,n+o],width:a-6})},bar:function(e,t){var i=t.x,n=t.y+1,a=t.width,o=t.height-2,r=3;e.moveTo(i+r,n),e.lineTo(i+a-r,n),e.quadraticCurveTo(i+a,n,i+a,n+r),e.lineTo(i+a,n+o-r),e.quadraticCurveTo(i+a,n+o,i+a-r,n+o),e.lineTo(i+r,n+o),e.quadraticCurveTo(i,n+o,i,n+o-r),e.lineTo(i,n+r),e.quadraticCurveTo(i,n,i+r,n)},force:function(e,t){r.prototype.iconLibrary.circle(e,t)},radar:function(e,t){var i=6,n=t.x+t.width/2,a=t.y+t.height/2,o=t.height/2,r=2*Math.PI/i,s=-Math.PI/2,l=n+o*Math.cos(s),h=a+o*Math.sin(s);e.moveTo(l,h),s+=r;for(var d=0,m=i-1;m>d;d++)e.lineTo(n+o*Math.cos(s),a+o*Math.sin(s)),s+=r;e.lineTo(l,h)}};m.chord=m.pie,m.map=m.bar;for(var c in m)r.prototype.iconLibrary["legendicon"+c]=m[c];return h.inherits(t,i),e("../component").define("legend",t),t}),define("echarts/util/ecData",[],function(){function e(e,t,i,n,a,o,r,s){var l;return"undefined"!=typeof n&&(l=null==n.value?n:n.value),e._echartsData={_series:t,_seriesIndex:i,_data:n,_dataIndex:a,_name:o,_value:l,_special:r,_special2:s},e._echartsData}function t(e,t){var i=e._echartsData;if(!t)return i;switch(t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":return i&&i["_"+t]}return null}function i(e,t,i){switch(e._echartsData=e._echartsData||{},t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":e._echartsData["_"+t]=i}}function n(e,t){t._echartsData={_series:e._echartsData._series,_seriesIndex:e._echartsData._seriesIndex,_data:e._echartsData._data,_dataIndex:e._echartsData._dataIndex,_name:e._echartsData._name,_value:e._echartsData._value,_special:e._echartsData._special,_special2:e._echartsData._special2}}return{pack:e,set:i,get:t,clone:n}}),define("echarts/chart",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),define("zrender/tool/color",["require","../tool/util"],function(e){function t(e){D=e}function i(){D=N}function n(e,t){return e=0|e,t=t||D,t[e%t.length]}function a(e){H=e}function o(){B=H}function r(){return H}function s(e,t,i,n,a,o,r){O||(O=P.getContext());for(var s=O.createRadialGradient(e,t,i,n,a,o),l=0,h=r.length;h>l;l++)s.addColorStop(r[l][0],r[l][1]);return s.__nonRecursion=!0,s}function l(e,t,i,n,a){O||(O=P.getContext());for(var o=O.createLinearGradient(e,t,i,n),r=0,s=a.length;s>r;r++)o.addColorStop(a[r][0],a[r][1]);return o.__nonRecursion=!0,o}function h(e,t,i){e=u(e),t=u(t),e=K(e),t=K(t);for(var n=[],a=(t[0]-e[0])/i,o=(t[1]-e[1])/i,r=(t[2]-e[2])/i,s=(t[3]-e[3])/i,l=0,h=e[0],d=e[1],c=e[2],p=e[3];i>l;l++)n[l]=m([C(Math.floor(h),[0,255]),C(Math.floor(d),[0,255]),C(Math.floor(c),[0,255]),p.toFixed(4)-0],"rgba"),h+=a,d+=o,c+=r,p+=s;return h=t[0],d=t[1],c=t[2],p=t[3],n[l]=m([h,d,c,p],"rgba"),n}function d(e,t){var i=[],n=e.length;if(void 0===t&&(t=20),1===n)i=h(e[0],e[0],t);else if(n>1)for(var a=0,o=n-1;o>a;a++){var r=h(e[a],e[a+1],t);o-1>a&&r.pop(),i=i.concat(r)}return i}function m(e,t){if(t=t||"rgb",e&&(3===e.length||4===e.length)){if(e=T(e,function(e){return e>1?Math.ceil(e):e}),t.indexOf("hex")>-1)return"#"+((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1);if(t.indexOf("hs")>-1){var i=T(e.slice(1,3),function(e){return e+"%"});e[1]=i[0],e[2]=i[1]}return t.indexOf("a")>-1?(3===e.length&&e.push(1),e[3]=C(e[3],[0,1]),t+"("+e.slice(0,4).join(",")+")"):t+"("+e.slice(0,3).join(",")+")"}}function c(e){e=L(e),e.indexOf("rgba")<0&&(e=u(e));var t=[],i=0;return e.replace(/[\d.]+/g,function(e){e=3>i?0|e:+e,t[i++]=e}),t}function p(e,t){if(!E(e))return e;var i=K(e),n=i[3];return"undefined"==typeof n&&(n=1),e.indexOf("hsb")>-1?i=A(i):e.indexOf("hsl")>-1&&(i=z(i)),t.indexOf("hsb")>-1||t.indexOf("hsv")>-1?i=J(i):t.indexOf("hsl")>-1&&(i=F(i)),i[3]=n,m(i,t)}function u(e){return p(e,"rgba")}function V(e){return p(e,"rgb")}function U(e){return p(e,"hex")}function y(e){return p(e,"hsva")}function g(e){return p(e,"hsv")}function f(e){return p(e,"hsba")}function b(e){return p(e,"hsb")}function _(e){return p(e,"hsla")}function x(e){return p(e,"hsl")}function k(e){for(var t in G)if(U(G[t])===U(e))return t;return null}function L(e){return String(e).replace(/\s+/g,"")}function v(e){if(G[e]&&(e=G[e]),e=L(e),e=e.replace(/hsv/i,"hsb"),/^#[\da-f]{3}$/i.test(e)){e=parseInt(e.slice(1),16);var t=(3840&e)<<8,i=(240&e)<<4,n=15&e;e="#"+((1<<24)+(t<<4)+t+(i<<4)+i+(n<<4)+n).toString(16).slice(1)}return e}function W(e,t){if(!E(e))return e;var i=t>0?1:-1;"undefined"==typeof t&&(t=0),t=Math.abs(t)>1?1:Math.abs(t),e=V(e);for(var n=K(e),a=0;3>a;a++)n[a]=1===i?n[a]*(1-t)|0:(255-n[a])*t+n[a]|0;return"rgb("+n.join(",")+")"}function w(e){if(!E(e))return e;var t=K(u(e));return t=T(t,function(e){return 255-e}),m(t,"rgb")}function X(e,t,i){if(!E(e)||!E(t))return e;"undefined"==typeof i&&(i=.5),i=1-C(i,[0,1]);for(var n=2*i-1,a=K(u(e)),o=K(u(t)),r=a[3]-o[3],s=((n*r===-1?n:(n+r)/(1+n*r))+1)/2,l=1-s,h=[],d=0;3>d;d++)h[d]=a[d]*s+o[d]*l;var c=a[3]*i+o[3]*(1-i);return c=Math.max(0,Math.min(1,c)),1===a[3]&&1===o[3]?m(h,"rgb"):(h[3]=c,m(h,"rgba"))}function I(){return"#"+(Math.random().toString(16)+"0000").slice(2,8)}function K(e){e=v(e);var t=e.match(R);if(null===t)throw new Error("The color format error");var i,n,a,o=[];if(t[2])i=t[2].replace("#","").split(""),a=[i[0]+i[1],i[2]+i[3],i[4]+i[5]],o=T(a,function(e){return C(parseInt(e,16),[0,255])});else if(t[4]){var r=t[4].split(",");n=r[3],a=r.slice(0,3),o=T(a,function(e){return e=Math.floor(e.indexOf("%")>0?2.55*parseInt(e,0):e),C(e,[0,255])}),"undefined"!=typeof n&&o.push(C(parseFloat(n),[0,1]))}else if(t[5]||t[6]){var s=(t[5]||t[6]).split(","),l=parseInt(s[0],0)/360,h=s[1],d=s[2];n=s[3],o=T([h,d],function(e){return C(parseFloat(e)/100,[0,1])}),o.unshift(l),"undefined"!=typeof n&&o.push(C(parseFloat(n),[0,1]))}return o}function S(e,t){if(!E(e))return e;null===t&&(t=1);var i=K(u(e));return i[3]=C(Number(t).toFixed(4),[0,1]),m(i,"rgba")}function T(e,t){if("function"!=typeof t)throw new TypeError;for(var i=e?e.length:0,n=0;i>n;n++)e[n]=t(e[n]);return e}function C(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function E(e){return e instanceof Array||"string"==typeof e}function A(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s=6*a;6===s&&(s=0);var l=0|s,h=r*(1-o),d=r*(1-o*(s-l)),m=r*(1-o*(1-(s-l))),c=0,p=0,u=0;0===l?(c=r,p=m,u=h):1===l?(c=d,p=r,u=h):2===l?(c=h,p=r,u=m):3===l?(c=h,p=d,u=r):4===l?(c=m,p=h,u=r):(c=r,p=h,u=d),t=255*c,i=255*p,n=255*u}return[t,i,n]}function z(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s;s=.5>r?r*(1+o):r+o-o*r;var l=2*r-s;t=255*M(l,s,a+1/3),i=255*M(l,s,a),n=255*M(l,s,a-1/3)}return[t,i,n]}function M(e,t,i){return 0>i&&(i+=1),i>1&&(i-=1),1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function J(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=s;if(0===l)t=0,i=0;else{i=l/s;var d=((s-n)/6+l/2)/l,m=((s-a)/6+l/2)/l,c=((s-o)/6+l/2)/l;n===s?t=c-m:a===s?t=1/3+d-c:o===s&&(t=2/3+m-d),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}function F(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=(s+r)/2;if(0===l)t=0,i=0;else{i=.5>h?l/(s+r):l/(2-s-r);var d=((s-n)/6+l/2)/l,m=((s-a)/6+l/2)/l,c=((s-o)/6+l/2)/l;n===s?t=c-m:a===s?t=1/3+d-c:o===s&&(t=2/3+m-d),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}var O,P=e("../tool/util"),D=["#ff9277"," #dddd00"," #ffc877"," #bbe3ff"," #d5ffbb","#bbbbff"," #ddb000"," #b0dd00"," #e2bbff"," #ffbbe3","#ff7777"," #ff9900"," #83dd00"," #77e3ff"," #778fff","#c877ff"," #ff77ab"," #ff6600"," #aa8800"," #77c7ff","#ad77ff"," #ff77ff"," #dd0083"," #777700"," #00aa00","#0088aa"," #8400dd"," #aa0088"," #dd0000"," #772e00"],N=D,H="rgba(255,255,0,0.5)",B=H,R=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"};return{customPalette:t,resetPalette:i,getColor:n,getHighlightColor:r,customHighlight:a,resetHighlight:o,getRadialGradient:s,getLinearGradient:l,getGradientColors:d,getStepColors:h,reverse:w,mix:X,lift:W,trim:L,random:I,toRGB:V,toRGBA:u,toHex:U,toHSL:x,toHSLA:_,toHSB:b,toHSBA:f,toHSV:g,toHSVA:y,toName:k,toColor:m,toArray:c,alpha:S,getData:K}}),define("echarts/component/timeline",["require","./base","zrender/shape/Rectangle","../util/shape/Icon","../util/shape/Chain","../config","zrender/tool/util","zrender/tool/area","zrender/tool/event","../component"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o);var r=this;if(r._onclick=function(e){return r.__onclick(e)},r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},r._setCurrentOption=function(){var e=r.timelineOption;r.currentIndex%=e.data.length;var t=r.options[r.currentIndex]||{};r.myChart.setOption(t,e.notMerge),r.messageCenter.dispatch(s.EVENT.TIMELINE_CHANGED,null,{currentIndex:r.currentIndex,data:null!=e.data[r.currentIndex].name?e.data[r.currentIndex].name:e.data[r.currentIndex]},r.myChart)},r._onFrame=function(){r._setCurrentOption(),r._syncHandleShape(),r.timelineOption.autoPlay&&(r.playTicket=setTimeout(function(){return r.currentIndex+=1,!r.timelineOption.loop&&r.currentIndex>=r.timelineOption.data.length?(r.currentIndex=r.timelineOption.data.length-1,void r.stop()):void r._onFrame()},r.timelineOption.playInterval))},this.setTheme(!1),this.options=this.option.options,this.currentIndex=this.timelineOption.currentIndex%this.timelineOption.data.length,this.timelineOption.notMerge||0===this.currentIndex||(this.options[this.currentIndex]=l.merge(this.options[this.currentIndex],this.options[0])),this.timelineOption.show&&(this._buildShape(),this._syncHandleShape()),this._setCurrentOption(),this.timelineOption.autoPlay){var r=this;this.playTicket=setTimeout(function(){r.play()},this.ecTheme.animationDuration)}}function i(e,t){var i=2,n=t.x+i,a=t.y+i+2,r=t.width-i,s=t.height-i,l=t.symbol;if("last"===l)e.moveTo(n+r-2,a+s/3),e.lineTo(n+r-2,a),e.lineTo(n+2,a+s/2),e.lineTo(n+r-2,a+s),e.lineTo(n+r-2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("next"===l)e.moveTo(n+2,a+s/3),e.lineTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("play"===l)if("stop"===t.status)e.moveTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a);else{var h="both"===t.brushType?2:3;e.rect(n+2,a,h,s),e.rect(n+r-h-2,a,h,s)}else if(l.match("image")){var d="";d=l.replace(new RegExp("^image:\\/\\/"),""),l=o.prototype.iconLibrary.image,l(e,{x:n,y:a,width:r,height:s,image:d})}}var n=e("./base"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/Icon"),r=e("../util/shape/Chain"),s=e("../config"),l=e("zrender/tool/util"),h=e("zrender/tool/area"),d=e("zrender/tool/event");return t.prototype={type:s.COMPONENT_TYPE_TIMELINE,_buildShape:function(){if(this._location=this._getLocation(),this._buildBackground(),this._buildControl(),this._chainPoint=this._getChainPoint(),this.timelineOption.label.show)for(var e=this._getInterval(),t=0,i=this._chainPoint.length;i>t;t+=e)this._chainPoint[t].showLabel=!0;this._buildChain(),this._buildHandle();for(var t=0,n=this.shapeList.length;n>t;t++)this.zr.addShape(this.shapeList[t])},_getLocation:function(){var e,t=this.timelineOption,i=this.reformCssArray(this.timelineOption.padding),n=this.zr.getWidth(),a=this.parsePercent(t.x,n),o=this.parsePercent(t.x2,n);null==t.width?(e=n-a-o,o=n-o):(e=this.parsePercent(t.width,n),o=a+e);var r,s,l=this.zr.getHeight(),h=this.parsePercent(t.height,l);return null!=t.y?(r=this.parsePercent(t.y,l),s=r+h):(s=l-this.parsePercent(t.y2,l),r=s-h),{x:a+i[3],y:r+i[0],x2:o-i[1],y2:s-i[2],width:e-i[1]-i[3],height:h-i[0]-i[2]}},_getReformedLabel:function(e){var t=this.timelineOption,i=null!=t.data[e].name?t.data[e].name:t.data[e],n=t.data[e].formatter||t.label.formatter;return n&&("function"==typeof n?i=n.call(this.myChart,i):"string"==typeof n&&(i=n.replace("{value}",i))),i},_getInterval:function(){var e=this._chainPoint,t=this.timelineOption,i=t.label.interval;if("auto"===i){var n=t.label.textStyle.fontSize,a=t.data,o=t.data.length;if(o>3){var r,s,l=!1;for(i=0;!l&&o>i;){i++,l=!0;for(var d=i;o>d;d+=i){if(r=e[d].x-e[d-i].x,0!==t.label.rotate)s=n;else if(a[d].textStyle)s=h.getTextWidth(e[d].name,e[d].textFont);else{var m=e[d].name+"",c=(m.match(/\w/g)||"").length,p=m.length-c;s=c*n*2/3+p*n}if(s>r){l=!1;break}}}}else i=1}else i=i-0+1;return i},_getChainPoint:function(){function e(e){return null!=h[e].name?h[e].name:h[e]+""}var t,i=this.timelineOption,n=i.symbol.toLowerCase(),a=i.symbolSize,o=i.label.rotate,r=i.label.textStyle,s=this.getFont(r),h=i.data,d=this._location.x,m=this._location.y+this._location.height/4*3,c=this._location.x2-this._location.x,p=h.length,u=[];if(p>1){var V=c/p;if(V=V>50?50:20>V?5:V,c-=2*V,"number"===i.type)for(var U=0;p>U;U++)u.push(d+V+c/(p-1)*U);else{u[0]=new Date(e(0).replace(/-/g,"/")),u[p-1]=new Date(e(p-1).replace(/-/g,"/"))-u[0];for(var U=1;p>U;U++)u[U]=d+V+c*(new Date(e(U).replace(/-/g,"/"))-u[0])/u[p-1];u[0]=d+V}}else u.push(d+c/2);for(var y,g,f,b,_,x=[],U=0;p>U;U++)d=u[U],y=h[U].symbol&&h[U].symbol.toLowerCase()||n,y.match("empty")?(y=y.replace("empty",""),f=!0):f=!1,y.match("star")&&(g=y.replace("star","")-0||5,y="star"),t=h[U].textStyle?l.merge(h[U].textStyle||{},r):r,b=t.align||"center",o?(b=o>0?"right":"left",_=[o*Math.PI/180,d,m-5]):_=!1,x.push({x:d,n:g,isEmpty:f,symbol:y,symbolSize:h[U].symbolSize||a,color:h[U].color,borderColor:h[U].borderColor,borderWidth:h[U].borderWidth,name:this._getReformedLabel(U),textColor:t.color,textAlign:b,textBaseline:t.baseline||"middle",textX:d,textY:m-(o?5:0),textFont:h[U].textStyle?this.getFont(t):s,rotation:_,showLabel:!1});return x},_buildBackground:function(){var e=this.timelineOption,t=this.reformCssArray(this.timelineOption.padding),i=this._location.width,n=this._location.height;(0!==e.borderWidth||"rgba(0,0,0,0)"!=e.backgroundColor.replace(/\s/g,""))&&this.shapeList.push(new a({zlevel:this._zlevelBase,hoverable:!1,style:{x:this._location.x-t[3],y:this._location.y-t[0],width:i+t[1]+t[3],height:n+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_buildControl:function(){var e=this,t=this.timelineOption,i=t.lineStyle,n=t.controlStyle;if("none"!==t.controlPosition){var a,r=15,s=5;"left"===t.controlPosition?(a=this._location.x,this._location.x+=3*(r+s)):(a=this._location.x2-(3*(r+s)-s),this._location.x2-=3*(r+s));var h=this._location.y,d={zlevel:this._zlevelBase+1,style:{iconType:"timelineControl",symbol:"last",x:a,y:h,width:r,height:r,brushType:"stroke",color:n.normal.color,strokeColor:n.normal.color,lineWidth:i.width},highlightStyle:{color:n.emphasis.color,strokeColor:n.emphasis.color,lineWidth:i.width+1},clickable:!0};this._ctrLastShape=new o(d),this._ctrLastShape.onclick=function(){e.last()},this.shapeList.push(this._ctrLastShape),a+=r+s,this._ctrPlayShape=new o(l.clone(d)),this._ctrPlayShape.style.brushType="fill",this._ctrPlayShape.style.symbol="play",this._ctrPlayShape.style.status=this.timelineOption.autoPlay?"playing":"stop",this._ctrPlayShape.style.x=a,this._ctrPlayShape.onclick=function(){"stop"===e._ctrPlayShape.style.status?e.play():e.stop()},this.shapeList.push(this._ctrPlayShape),a+=r+s,this._ctrNextShape=new o(l.clone(d)),this._ctrNextShape.style.symbol="next",this._ctrNextShape.style.x=a,this._ctrNextShape.onclick=function(){e.next()},this.shapeList.push(this._ctrNextShape)}},_buildChain:function(){var e=this.timelineOption,t=e.lineStyle;this._timelineShae={zlevel:this._zlevelBase,style:{x:this._location.x,y:this.subPixelOptimize(this._location.y,t.width),width:this._location.x2-this._location.x,height:this._location.height,chainPoint:this._chainPoint,brushType:"both",strokeColor:t.color,lineWidth:t.width,lineType:t.type},hoverable:!1,clickable:!0,onclick:this._onclick},this._timelineShae=new r(this._timelineShae),this.shapeList.push(this._timelineShae)},_buildHandle:function(){var e=this._chainPoint[this.currentIndex],t=e.symbolSize+1;t=5>t?5:t,this._handleShape={zlevel:this._zlevelBase+1,hoverable:!1,draggable:!0,style:{iconType:"diamond",n:e.n,x:e.x-t,y:this._location.y+this._location.height/4-t,width:2*t,height:2*t,brushType:"both",textPosition:"specific",textX:e.x,textY:this._location.y-this._location.height/4,textAlign:"center",textBaseline:"middle"},highlightStyle:{},ondrift:this._ondrift,ondragend:this._ondragend},this._handleShape=new o(this._handleShape),this.shapeList.push(this._handleShape)},_syncHandleShape:function(){if(this.timelineOption.show){var e=this.timelineOption,t=e.checkpointStyle,i=this._chainPoint[this.currentIndex];this._handleShape.style.text=t.label.show?i.name:"",this._handleShape.style.textFont=i.textFont,this._handleShape.style.n=i.n,"auto"===t.symbol?this._handleShape.style.iconType="none"!=i.symbol?i.symbol:"diamond":(this._handleShape.style.iconType=t.symbol,t.symbol.match("star")&&(this._handleShape.style.n=t.symbol.replace("star","")-0||5,this._handleShape.style.iconType="star"));var n;"auto"===t.symbolSize?(n=i.symbolSize+2,n=5>n?5:n):n=t.symbolSize-0,this._handleShape.style.color="auto"===t.color?i.color?i.color:e.controlStyle.emphasis.color:t.color,this._handleShape.style.textColor="auto"===t.label.textStyle.color?this._handleShape.style.color:t.label.textStyle.color,this._handleShape.highlightStyle.strokeColor=this._handleShape.style.strokeColor="auto"===t.borderColor?i.borderColor?i.borderColor:"#fff":t.borderColor,this._handleShape.style.lineWidth="auto"===t.borderWidth?i.borderWidth?i.borderWidth:0:t.borderWidth-0,this._handleShape.highlightStyle.lineWidth=this._handleShape.style.lineWidth+1,this.zr.animate(this._handleShape.id,"style").when(500,{x:i.x-n,textX:i.x,y:this._location.y+this._location.height/4-n,width:2*n,height:2*n}).start("ExponentialOut") +}},_findChainIndex:function(e){var t=this._chainPoint,i=t.length;if(e<=t[0].x)return 0;if(e>=t[i-1].x)return i-1;for(var n=0;i-1>n;n++)if(e>=t[n].x&&e<=t[n+1].x)return Math.abs(e-t[n].x)=n[a-1].x-n[a-1].symbolSize?(e.style.x=n[a-1].x-n[a-1].symbolSize,i=a-1):(e.style.x+=t,i=this._findChainIndex(e.style.x));var o=n[i],r=o.symbolSize+2;if(e.style.iconType=o.symbol,e.style.n=o.n,e.style.textX=e.style.x+r/2,e.style.y=this._location.y+this._location.height/4-r,e.style.width=2*r,e.style.height=2*r,e.style.text=o.name,i===this.currentIndex)return!0;if(this.currentIndex=i,this.timelineOption.realtime){clearTimeout(this.playTicket);var s=this;this.playTicket=setTimeout(function(){s._setCurrentOption()},200)}return!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.timelineOption.realtime&&this._setCurrentOption(),t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this._syncHandleShape())},last:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex-=1,this.currentIndex<0&&(this.currentIndex=this.timelineOption.data.length-1),this._onFrame(),this.currentIndex},next:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex+=1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},play:function(e,t){return this._ctrPlayShape&&"playing"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="playing",this.zr.modShape(this._ctrPlayShape.id),this.zr.refresh()),this.timelineOption.autoPlay=null!=t?t:!0,this.timelineOption.autoPlay||clearTimeout(this.playTicket),this.currentIndex=null!=e?e:this.currentIndex+1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},stop:function(){return this._ctrPlayShape&&"stop"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="stop",this.zr.modShape(this._ctrPlayShape.id),this.zr.refresh()),this.timelineOption.autoPlay=!1,clearTimeout(this.playTicket),this.currentIndex},resize:function(){this.timelineOption.show&&(this.clear(),this._buildShape(),this._syncHandleShape())},setTheme:function(e){this.timelineOption=this.reformOption(l.clone(this.option.timeline)),this.timelineOption.label.textStyle=l.merge(this.timelineOption.label.textStyle||{},this.ecTheme.textStyle),this.timelineOption.checkpointStyle.label.textStyle=l.merge(this.timelineOption.checkpointStyle.label.textStyle||{},this.ecTheme.textStyle),this.myChart.canvasSupported||(this.timelineOption.realtime=!1),this.timelineOption.show&&e&&(this.clear(),this._buildShape(),this._syncHandleShape())},onbeforDispose:function(){clearTimeout(this.playTicket)}},o.prototype.iconLibrary.timelineControl=i,l.inherits(t,n),e("../component").define("timeline",t),t}),define("zrender/shape/Image",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"image",brush:function(e,t,i){var n=this.style||{};t&&(n=this.getHighlightStyle(n,this.highlightStyle||{}));var a=n.image,o=this;if(this._imageCache||(this._imageCache={}),"string"==typeof a){var r=a;this._imageCache[r]?a=this._imageCache[r]:(a=new Image,a.onload=function(){a.onload=null,o.modSelf(),i()},a.src=r,this._imageCache[r]=a)}if(a){if("IMG"==a.nodeName.toUpperCase())if(window.ActiveXObject){if("complete"!=a.readyState)return}else if(!a.complete)return;var s=n.width||a.width,l=n.height||a.height,h=n.x,d=n.y;if(!a.width||!a.height)return;if(e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.sWidth&&n.sHeight){var m=n.sx||0,c=n.sy||0;e.drawImage(a,m,c,n.sWidth,n.sHeight,h,d,s,l)}else if(n.sx&&n.sy){var m=n.sx,c=n.sy,p=s-m,u=l-c;e.drawImage(a,m,c,p,u,h,d,s,l)}else e.drawImage(a,h,d,s,l);n.width||(n.width=s),n.height||(n.height=l),this.style.width||(this.style.width=s),this.style.height||(this.style.height=l),this.drawText(e,n,this.style),e.restore()}},getRect:function(e){return{x:e.x,y:e.y,width:e.width,height:e.height}},clearCache:function(){this._imageCache={}}},e("../tool/util").inherits(i,t),i}),define("zrender/loadingEffect/Bar",["require","./Base","../tool/util","../tool/color","../shape/Rectangle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Rectangle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:0,y:this.canvasHeight/2-30,width:this.canvasWidth,height:5,brushType:"fill",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=new o({highlightStyle:n.clone(l)});return h.highlightStyle.color=l.color||a.getLinearGradient(l.x,l.y,l.x+l.width,l.y+l.height,[[0,"#ff6400"],[.5,"#ffe100"],[1,"#b1ff00"]]),null!=i.progress?(e(s),h.highlightStyle.width=this.adjust(i.progress,[0,1])*i.effectOption.width,e(h),e(r),void t()):(h.highlightStyle.width=0,setInterval(function(){e(s),h.highlightStyle.widthV;V++){var U="random"==l.color?a.alpha(a.random(),.3):l.color;c[V]=new o({highlightStyle:{x:Math.ceil(Math.random()*p),y:Math.ceil(Math.random()*u),r:Math.ceil(40*Math.random()),brushType:d,color:U,strokeColor:U,lineWidth:m},animationY:Math.ceil(20*Math.random())})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=c[i].highlightStyle;n.y-c[i].animationY+n.r<=0&&(c[i].highlightStyle.y=u+n.r,c[i].highlightStyle.x=Math.ceil(Math.random()*p)),c[i].highlightStyle.y-=c[i].animationY,e(c[i])}e(r),t()},l.timeInterval)},t}),define("zrender/loadingEffect/DynamicLine",["require","./Base","../tool/util","../tool/color","../shape/Line"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Line");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:"#fff"},backgroundColor:"rgba(0, 0, 0, 0.8)",effectOption:{n:30,lineWidth:1,color:"random",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=l.n,d=l.lineWidth,m=[],c=this.canvasWidth,p=this.canvasHeight,u=0;h>u;u++){var V=-Math.ceil(1e3*Math.random()),U=Math.ceil(400*Math.random()),y=Math.ceil(Math.random()*p),g="random"==l.color?a.random():l.color;m[u]=new o({highlightStyle:{xStart:V,yStart:y,xEnd:V+U,yEnd:y,strokeColor:g,lineWidth:d},animationX:Math.ceil(100*Math.random()),len:U})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=m[i].highlightStyle;n.xStart>=c&&(m[i].len=Math.ceil(400*Math.random()),n.xStart=-400,n.xEnd=-400+m[i].len,n.yStart=Math.ceil(Math.random()*p),n.yEnd=n.yStart),n.xStart+=m[i].animationX,n.xEnd+=m[i].animationX,e(m[i])}e(r),t()},l.timeInterval)},t}),define("zrender/loadingEffect/Ring",["require","./Base","../tool/util","../tool/color","../shape/Ring","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Ring"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#07a"},backgroundColor:"rgba(250, 250, 250, 0.8)",effect:{x:this.canvasWidth/2,y:this.canvasHeight/2,r0:60,r:100,color:"#bbdcff",brushType:"fill",textPosition:"inside",textFont:"normal 30px verdana",textColor:"rgba(30, 144, 255, 0.6)",timeInterval:100}}),s=i.effect,l=i.textStyle;null==l.x&&(l.x=s.x),null==l.y&&(l.y=s.y+(s.r0+s.r)/2-5);for(var h=this.createTextShape(i.textStyle),d=this.createBackgroundShape(i.backgroundColor),m=s.x,c=s.y,p=s.r0+6,u=s.r-6,V=s.color,U=a.lift(V,.1),y=new o({highlightStyle:n.clone(s)}),g=[],f=a.getGradientColors(["#ff6400","#ffe100","#97ff00"],25),b=15,_=240,x=0;16>x;x++)g.push(new r({highlightStyle:{x:m,y:c,r0:p,r:u,startAngle:_-b,endAngle:_,brushType:"fill",color:U},_color:a.getLinearGradient(m+p*Math.cos(_,!0),c-p*Math.sin(_,!0),m+p*Math.cos(_-b,!0),c-p*Math.sin(_-b,!0),[[0,f[2*x]],[1,f[2*x+1]]])})),_-=b;_=360;for(var x=0;4>x;x++)g.push(new r({highlightStyle:{x:m,y:c,r0:p,r:u,startAngle:_-b,endAngle:_,brushType:"fill",color:U},_color:a.getLinearGradient(m+p*Math.cos(_,!0),c-p*Math.sin(_,!0),m+p*Math.cos(_-b,!0),c-p*Math.sin(_-b,!0),[[0,f[2*x+32]],[1,f[2*x+33]]])})),_-=b;var k=0;if(null!=i.progress){e(d),k=100*this.adjust(i.progress,[0,1]).toFixed(2)/5,y.highlightStyle.text=5*k+"%",e(y);for(var x=0;20>x;x++)g[x].highlightStyle.color=k>x?g[x]._color:U,e(g[x]);return e(h),void t()}return setInterval(function(){e(d),k+=k>=20?-20:1,e(y);for(var i=0;20>i;i++)g[i].highlightStyle.color=k>i?g[i]._color:U,e(g[i]);e(h),t()},s.timeInterval)},t}),define("zrender/loadingEffect/Spin",["require","./Base","../tool/util","../tool/color","../tool/area","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../tool/area"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#fff",textAlign:"start"},backgroundColor:"rgba(0, 0, 0, 0.8)"}),s=this.createTextShape(i.textStyle),l=10,h=o.getTextWidth(s.highlightStyle.text,s.highlightStyle.textFont),d=o.getTextHeight(s.highlightStyle.text,s.highlightStyle.textFont),m=n.merge(this.options.effect||{},{r0:9,r:15,n:18,color:"#fff",timeInterval:100}),c=this.getLocation(this.options.textStyle,h+l+2*m.r,Math.max(2*m.r,d));m.x=c.x+m.r,m.y=s.highlightStyle.y=c.y+c.height/2,s.highlightStyle.x=m.x+m.r+l;for(var p=this.createBackgroundShape(i.backgroundColor),u=m.n,V=m.x,U=m.y,y=m.r0,g=m.r,f=m.color,b=[],_=Math.round(180/u),x=0;u>x;x++)b[x]=new r({highlightStyle:{x:V,y:U,r0:y,r:g,startAngle:_*x*2,endAngle:_*x*2+_,color:a.alpha(f,(x+1)/u),brushType:"fill"}});var k=[0,V,U];return setInterval(function(){e(p),k[0]-=.3;for(var i=0;u>i;i++)b[i].rotation=k,e(b[i]);e(s),t()},m.timeInterval)},t}),define("zrender/loadingEffect/Whirling",["require","./Base","../tool/util","../tool/area","../shape/Ring","../shape/Droplet","../shape/Circle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/area"),o=e("../shape/Ring"),r=e("../shape/Droplet"),s=e("../shape/Circle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888",textAlign:"start"},backgroundColor:"rgba(250, 250, 250, 0.8)"}),l=this.createTextShape(i.textStyle),h=10,d=a.getTextWidth(l.highlightStyle.text,l.highlightStyle.textFont),m=a.getTextHeight(l.highlightStyle.text,l.highlightStyle.textFont),c=n.merge(this.options.effect||{},{r:18,colorIn:"#fff",colorOut:"#555",colorWhirl:"#6cf",timeInterval:50}),p=this.getLocation(this.options.textStyle,d+h+2*c.r,Math.max(2*c.r,m));c.x=p.x+c.r,c.y=l.highlightStyle.y=p.y+p.height/2,l.highlightStyle.x=c.x+c.r+h;var u=this.createBackgroundShape(i.backgroundColor),V=new r({highlightStyle:{a:Math.round(c.r/2),b:Math.round(c.r-c.r/6),brushType:"fill",color:c.colorWhirl}}),U=new s({highlightStyle:{r:Math.round(c.r/6),brushType:"fill",color:c.colorIn}}),y=new o({highlightStyle:{r0:Math.round(c.r-c.r/3),r:c.r,brushType:"fill",color:c.colorOut}}),g=[0,c.x,c.y];return V.highlightStyle.x=U.highlightStyle.x=y.highlightStyle.x=g[1],V.highlightStyle.y=U.highlightStyle.y=y.highlightStyle.y=g[2],setInterval(function(){e(u),e(y),g[0]-=.3,V.rotation=g,e(V),e(U),e(l),t()},c.timeInterval)},t}),define("echarts/theme/default",[],function(){var e={};return e}),define("zrender/dep/excanvas",["require"],function(){return document.createElement("canvas").getContext?G_vmlCanvasManager=!1:!function(){function e(){return this.context_||(this.context_=new b(this))}function t(e,t){var i=O.call(arguments,2);return function(){return e.apply(t,i.concat(O.call(arguments)))}}function i(e){return String(e).replace(/&/g,"&").replace(/"/g,""")}function n(e,t,i){e.namespaces[t]||e.namespaces.add(t,i,"#default#VML")}function a(e){if(n(e,"g_vml_","urn:schemas-microsoft-com:vml"),n(e,"g_o_","urn:schemas-microsoft-com:office:office"),!e.styleSheets.ex_canvas_){var t=e.createStyleSheet();t.owningElement.id="ex_canvas_",t.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}function o(e){var t=e.srcElement;switch(e.propertyName){case"width":t.getContext().clearRect(),t.style.width=t.attributes.width.nodeValue+"px",t.firstChild.style.width=t.clientWidth+"px";break;case"height":t.getContext().clearRect(),t.style.height=t.attributes.height.nodeValue+"px",t.firstChild.style.height=t.clientHeight+"px"}}function r(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width=t.clientWidth+"px",t.firstChild.style.height=t.clientHeight+"px")}function s(){return[[1,0,0],[0,1,0],[0,0,1]]}function l(e,t){for(var i=s(),n=0;3>n;n++)for(var a=0;3>a;a++){for(var o=0,r=0;3>r;r++)o+=e[n][r]*t[r][a];i[n][a]=o}return i}function h(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.lineWidth=e.lineWidth,t.miterLimit=e.miterLimit,t.shadowBlur=e.shadowBlur,t.shadowColor=e.shadowColor,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY,t.strokeStyle=e.strokeStyle,t.globalAlpha=e.globalAlpha,t.font=e.font,t.textAlign=e.textAlign,t.textBaseline=e.textBaseline,t.scaleX_=e.scaleX_,t.scaleY_=e.scaleY_,t.lineScale_=e.lineScale_}function d(e){var t=e.indexOf("(",3),i=e.indexOf(")",t+1),n=e.substring(t+1,i).split(",");return(4!=n.length||"a"!=e.charAt(3))&&(n[3]=1),n}function m(e){return parseFloat(e)/100}function c(e,t,i){return Math.min(i,Math.max(t,e))}function p(e){var t,i,n,a,o,r;if(a=parseFloat(e[0])/360%360,0>a&&a++,o=c(m(e[1]),0,1),r=c(m(e[2]),0,1),0==o)t=i=n=r;else{var s=.5>r?r*(1+o):r+o-r*o,l=2*r-s;t=u(l,s,a+1/3),i=u(l,s,a),n=u(l,s,a-1/3)}return"#"+D[Math.floor(255*t)]+D[Math.floor(255*i)]+D[Math.floor(255*n)]}function u(e,t,i){return 0>i&&i++,i>1&&i--,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function V(e){if(e in R)return R[e];var t,i=1;if(e=String(e),"#"==e.charAt(0))t=e;else if(/^rgb/.test(e)){for(var n,a=d(e),t="#",o=0;3>o;o++)n=-1!=a[o].indexOf("%")?Math.floor(255*m(a[o])):+a[o],t+=D[c(n,0,255)];i=+a[3]}else if(/^hsl/.test(e)){var a=d(e);t=p(a),i=a[3]}else t=B[e]||e;return R[e]={color:t,alpha:i}}function U(e){if(Y[e])return Y[e];var t,i=document.createElement("div"),n=i.style;try{n.font=e,t=n.fontFamily.split(",")[0]}catch(a){}return Y[e]={style:n.fontStyle||G.style,variant:n.fontVariant||G.variant,weight:n.fontWeight||G.weight,size:n.fontSize||G.size,family:t||G.family}}function y(e,t){var i={};for(var n in e)i[n]=e[n];var a=parseFloat(t.currentStyle.fontSize),o=parseFloat(e.size);return i.size="number"==typeof e.size?e.size:-1!=e.size.indexOf("px")?o:-1!=e.size.indexOf("em")?a*o:-1!=e.size.indexOf("%")?a/100*o:-1!=e.size.indexOf("pt")?o/.75:a,i}function g(e){return e.style+" "+e.variant+" "+e.weight+" "+e.size+"px '"+e.family+"'"}function f(e){return Q[e]||"square"}function b(e){this.m_=s(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.strokeStyle="#000",this.fillStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=1*J,this.globalAlpha=1,this.font="12px 微软雅黑",this.textAlign="left",this.textBaseline="alphabetic",this.canvas=e;var t="width:"+e.clientWidth+"px;height:"+e.clientHeight+"px;overflow:hidden;position:absolute",i=e.ownerDocument.createElement("div");i.style.cssText=t,e.appendChild(i);var n=i.cloneNode(!1);n.style.backgroundColor="#fff",n.style.filter="alpha(opacity=0)",e.appendChild(n),this.element_=i,this.scaleX_=1,this.scaleY_=1,this.lineScale_=1}function _(e,t,i,n){e.currentPath_.push({type:"bezierCurveTo",cp1x:t.x,cp1y:t.y,cp2x:i.x,cp2y:i.y,x:n.x,y:n.y}),e.currentX_=n.x,e.currentY_=n.y}function x(e,t){var i=V(e.strokeStyle),n=i.color,a=i.alpha*e.globalAlpha,o=e.lineScale_*e.lineWidth;1>o&&(a*=o),t.push("')}function k(e,t,i,n){var a=e.fillStyle,o=e.scaleX_,r=e.scaleY_,s=n.x-i.x,l=n.y-i.y;if(a instanceof w){var h=0,d={x:0,y:0},m=0,c=1;if("gradient"==a.type_){var p=a.x0_/o,u=a.y0_/r,U=a.x1_/o,y=a.y1_/r,g=L(e,p,u),f=L(e,U,y),b=f.x-g.x,_=f.y-g.y;h=180*Math.atan2(b,_)/Math.PI,0>h&&(h+=360),1e-6>h&&(h=0)}else{var g=L(e,a.x0_,a.y0_);d={x:(g.x-i.x)/s,y:(g.y-i.y)/l},s/=o*J,l/=r*J;var x=T.max(s,l);m=2*a.r0_/x,c=2*a.r1_/x-m}var k=a.colors_;k.sort(function(e,t){return e.offset-t.offset});for(var v=k.length,W=k[0].color,I=k[v-1].color,K=k[0].alpha*e.globalAlpha,S=k[v-1].alpha*e.globalAlpha,C=[],E=0;v>E;E++){var A=k[E];C.push(A.offset*c+m+" "+A.color)}t.push('')}else if(a instanceof X){if(s&&l){var z=-i.x,M=-i.y;t.push("')}}else{var F=V(e.fillStyle),O=F.color,P=F.alpha*e.globalAlpha;t.push('')}}function L(e,t,i){var n=e.m_;return{x:J*(t*n[0][0]+i*n[1][0]+n[2][0])-F,y:J*(t*n[0][1]+i*n[1][1]+n[2][1])-F}}function v(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1][0])&&isFinite(e[1][1])&&isFinite(e[2][0])&&isFinite(e[2][1])}function W(e,t,i){if(v(t)&&(e.m_=t,e.scaleX_=Math.sqrt(t[0][0]*t[0][0]+t[0][1]*t[0][1]),e.scaleY_=Math.sqrt(t[1][0]*t[1][0]+t[1][1]*t[1][1]),i)){var n=t[0][0]*t[1][1]-t[0][1]*t[1][0];e.lineScale_=M(z(n))}}function w(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,this.y1_=0,this.r1_=0,this.colors_=[]}function X(e,t){switch(K(e),t){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=t;break;default:I("SYNTAX_ERR")}this.src_=e.src,this.width_=e.width,this.height_=e.height}function I(e){throw new S(e)}function K(e){e&&1==e.nodeType&&"IMG"==e.tagName||I("TYPE_MISMATCH_ERR"),"complete"!=e.readyState&&I("INVALID_STATE_ERR")}function S(e){this.code=this[e],this.message=e+": DOM Exception "+this.code}var T=Math,C=T.round,E=T.sin,A=T.cos,z=T.abs,M=T.sqrt,J=10,F=J/2,O=(+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1],Array.prototype.slice);a(document);var P={init:function(e){var i=e||document;i.createElement("canvas"),i.attachEvent("onreadystatechange",t(this.init_,this,i))},init_:function(e){for(var t=e.getElementsByTagName("canvas"),i=0;iN;N++)for(var H=0;16>H;H++)D[16*N+H]=N.toString(16)+H.toString(16);var B={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},R={},G={style:"normal",variant:"normal",weight:"normal",size:12,family:"微软雅黑"},Y={},Q={butt:"flat",round:"round"},q=b.prototype;q.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null),this.element_.innerHTML=""},q.beginPath=function(){this.currentPath_=[]},q.moveTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:"moveTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},q.lineTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:"lineTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},q.bezierCurveTo=function(e,t,i,n,a,o){var r=L(this,a,o),s=L(this,e,t),l=L(this,i,n);_(this,s,l,r)},q.quadraticCurveTo=function(e,t,i,n){var a=L(this,e,t),o=L(this,i,n),r={x:this.currentX_+2/3*(a.x-this.currentX_),y:this.currentY_+2/3*(a.y-this.currentY_)},s={x:r.x+(o.x-this.currentX_)/3,y:r.y+(o.y-this.currentY_)/3};_(this,r,s,o)},q.arc=function(e,t,i,n,a,o){i*=J;var r=o?"at":"wa",s=e+A(n)*i-F,l=t+E(n)*i-F,h=e+A(a)*i-F,d=t+E(a)*i-F;s!=h||o||(s+=.125);var m=L(this,e,t),c=L(this,s,l),p=L(this,h,d);this.currentPath_.push({type:r,x:m.x,y:m.y,radius:i,xStart:c.x,yStart:c.y,xEnd:p.x,yEnd:p.y})},q.rect=function(e,t,i,n){this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath()},q.strokeRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.stroke(),this.currentPath_=a},q.fillRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.fill(),this.currentPath_=a},q.createLinearGradient=function(e,t,i,n){var a=new w("gradient");return a.x0_=e,a.y0_=t,a.x1_=i,a.y1_=n,a},q.createRadialGradient=function(e,t,i,n,a,o){var r=new w("gradientradial");return r.x0_=e,r.y0_=t,r.r0_=i,r.x1_=n,r.y1_=a,r.r1_=o,r},q.drawImage=function(e){var t,i,n,a,o,r,s,l,h=e.runtimeStyle.width,d=e.runtimeStyle.height;e.runtimeStyle.width="auto",e.runtimeStyle.height="auto";var m=e.width,c=e.height;if(e.runtimeStyle.width=h,e.runtimeStyle.height=d,3==arguments.length)t=arguments[1],i=arguments[2],o=r=0,s=n=m,l=a=c;else if(5==arguments.length)t=arguments[1],i=arguments[2],n=arguments[3],a=arguments[4],o=r=0,s=m,l=c;else{if(9!=arguments.length)throw Error("Invalid number of arguments");o=arguments[1],r=arguments[2],s=arguments[3],l=arguments[4],t=arguments[5],i=arguments[6],n=arguments[7],a=arguments[8]}var p=L(this,t,i),u=[],V=10,U=10,y=f=1;if(u.push(" '),(o||r)&&u.push('
'),u.push('
'),(o||r)&&u.push("
"),u.push("
"),this.element_.insertAdjacentHTML("BeforeEnd",u.join(""))},q.stroke=function(e){var t=[],i=10,n=10;t.push("o.x)&&(o.x=l.x),(null==a.y||l.yo.y)&&(o.y=l.y))}t.push(' ">'),e?k(this,t,a,o):x(this,t),t.push(""),this.element_.insertAdjacentHTML("beforeEnd",t.join(""))},q.fill=function(){this.stroke(!0)},q.closePath=function(){this.currentPath_.push({type:"close"})},q.save=function(){var e={};h(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=l(s(),this.m_)},q.restore=function(){this.aStack_.length&&(h(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},q.translate=function(e,t){var i=[[1,0,0],[0,1,0],[e,t,1]];W(this,l(i,this.m_),!1)},q.rotate=function(e){var t=A(e),i=E(e),n=[[t,i,0],[-i,t,0],[0,0,1]];W(this,l(n,this.m_),!1)},q.scale=function(e,t){var i=[[e,0,0],[0,t,0],[0,0,1]];W(this,l(i,this.m_),!0)},q.transform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];W(this,l(r,this.m_),!0)},q.setTransform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];W(this,r,!0)},q.drawText_=function(e,t,n,a,o){var r=this.m_,s=1e3,l=0,h=s,d={x:0,y:0},m=[],c=y(U(this.font),this.element_),p=g(c),u=this.element_.currentStyle,V=this.textAlign.toLowerCase();switch(V){case"left":case"center":case"right":break;case"end":V="ltr"==u.direction?"right":"left";break;case"start":V="rtl"==u.direction?"right":"left";break;default:V="left"}switch(this.textBaseline){case"hanging":case"top":d.y=c.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":d.y=-c.size/2.25}switch(V){case"right":l=s,h=.05;break;case"center":l=h=s/2}var f=L(this,t+d.x,n+d.y);m.push(''),o?x(this,m):k(this,m,{x:-l,y:0},{x:h,y:c.size});var b=r[0][0].toFixed(3)+","+r[1][0].toFixed(3)+","+r[0][1].toFixed(3)+","+r[1][1].toFixed(3)+",0,0",_=C(f.x/J)+","+C(f.y/J);m.push('','',''),this.element_.insertAdjacentHTML("beforeEnd",m.join(""))},q.fillText=function(e,t,i,n){this.drawText_(e,t,i,n,!1)},q.strokeText=function(e,t,i,n){this.drawText_(e,t,i,n,!0)},q.measureText=function(e){if(!this.textMeasureEl_){var t='';this.element_.insertAdjacentHTML("beforeEnd",t),this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";try{this.textMeasureEl_.style.font=this.font}catch(n){}return this.textMeasureEl_.appendChild(i.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},q.clip=function(){},q.arcTo=function(){},q.createPattern=function(e,t){return new X(e,t)},w.prototype.addColorStop=function(e,t){t=V(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var Z=S.prototype=new Error;Z.INDEX_SIZE_ERR=1,Z.DOMSTRING_SIZE_ERR=2,Z.HIERARCHY_REQUEST_ERR=3,Z.WRONG_DOCUMENT_ERR=4,Z.INVALID_CHARACTER_ERR=5,Z.NO_DATA_ALLOWED_ERR=6,Z.NO_MODIFICATION_ALLOWED_ERR=7,Z.NOT_FOUND_ERR=8,Z.NOT_SUPPORTED_ERR=9,Z.INUSE_ATTRIBUTE_ERR=10,Z.INVALID_STATE_ERR=11,Z.SYNTAX_ERR=12,Z.INVALID_MODIFICATION_ERR=13,Z.NAMESPACE_ERR=14,Z.INVALID_ACCESS_ERR=15,Z.VALIDATION_ERR=16,Z.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=P,CanvasRenderingContext2D=b,CanvasGradient=w,CanvasPattern=X,DOMException=S}(),G_vmlCanvasManager}),define("zrender/mixin/Eventful",["require"],function(){var e=function(){this._handlers={}};return e.prototype.one=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!0,ctx:i||this}),this):this},e.prototype.bind=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!1,ctx:i||this}),this):this},e.prototype.unbind=function(e,t){var i=this._handlers;if(!e)return this._handlers={},this;if(t){if(i[e]){for(var n=[],a=0,o=i[e].length;o>a;a++)i[e][a].h!=t&&n.push(i[e][a]);i[e]=n}i[e]&&0===i[e].length&&delete i[e]}else delete i[e];return this},e.prototype.dispatch=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>3&&(t=Array.prototype.slice.call(t,1));for(var n=this._handlers[e],a=n.length,o=0;a>o;){switch(i){case 1:n[o].h.call(n[o].ctx);break;case 2:n[o].h.call(n[o].ctx,t[1]);break;case 3:n[o].h.call(n[o].ctx,t[1],t[2]); +break;default:n[o].h.apply(n[o].ctx,t)}n[o].one?(n.splice(o,1),a--):o++}}return this},e.prototype.dispatchWithContext=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>4&&(t=Array.prototype.slice.call(t,1,t.length-1));for(var n=t[t.length-1],a=this._handlers[e],o=a.length,r=0;o>r;){switch(i){case 1:a[r].h.call(n);break;case 2:a[r].h.call(n,t[1]);break;case 3:a[r].h.call(n,t[1],t[2]);break;default:a[r].h.apply(n,t)}a[r].one?(a.splice(r,1),o--):r++}}return this},e}),define("zrender/tool/log",["require","../config"],function(e){var t=e("../config");return function(){if(0!==t.debugMode)if(1==t.debugMode)for(var e in arguments)throw new Error(arguments[e]);else if(t.debugMode>1)for(var e in arguments)console.log(arguments[e])}}),define("zrender/tool/guid",[],function(){var e=2311;return function(){return"zrender__"+e++}}),define("zrender/Handler",["require","./config","./tool/env","./tool/event","./tool/util","./tool/vector","./tool/matrix","./mixin/Eventful"],function(e){"use strict";function t(e,t){return function(i){return e.call(t,i)}}function i(e,t){return function(i,n,a){return e.call(t,i,n,a)}}function n(e){for(var i=p.length;i--;){var n=p[i];e["_"+n+"Handler"]=t(u[n],e)}}function a(e,t,i){if(this._draggingTarget&&this._draggingTarget.id==e.id||e.isSilent())return!1;var n=this._event;if(e.isCover(t,i)){e.hoverable&&this.storage.addHover(e);for(var a=e.parent;a;){if(a.clipShape&&!a.clipShape.isCover(this._mouseX,this._mouseY))return!1;a=a.parent}return this._lastHover!=e&&(this._processOutShape(n),this._processDragLeave(n),this._lastHover=e,this._processDragEnter(n)),this._processOverShape(n),this._processDragOver(n),this._hasfound=1,!0}return!1}var o=e("./config"),r=e("./tool/env"),s=e("./tool/event"),l=e("./tool/util"),h=e("./tool/vector"),d=e("./tool/matrix"),m=o.EVENT,c=e("./mixin/Eventful"),p=["resize","click","dblclick","mousewheel","mousemove","mouseout","mouseup","mousedown","touchstart","touchend","touchmove"],u={resize:function(e){e=e||window.event,this._lastHover=null,this._isMouseDown=0,this.dispatch(m.RESIZE,e)},click:function(e){e=this._zrenderEventFixed(e);var t=this._lastHover;(t&&t.clickable||!t)&&this._clickThreshold<5&&this._dispatchAgency(t,m.CLICK,e),this._mousemoveHandler(e)},dblclick:function(e){e=e||window.event,e=this._zrenderEventFixed(e);var t=this._lastHover;(t&&t.clickable||!t)&&this._clickThreshold<5&&this._dispatchAgency(t,m.DBLCLICK,e),this._mousemoveHandler(e)},mousewheel:function(e){e=this._zrenderEventFixed(e);var t=e.wheelDelta||-e.detail,i=t>0?1.1:1/1.1,n=this.painter.getLayers(),a=!1;for(var o in n)if("hover"!==o){var r=n[o],l=r.position;if(r.zoomable){r.__zoom=r.__zoom||1;var h=r.__zoom;h*=i,h=Math.max(Math.min(r.maxZoom,h),r.minZoom),i=h/r.__zoom,r.__zoom=h,l[0]-=(this._mouseX-l[0])*(i-1),l[1]-=(this._mouseY-l[1])*(i-1),r.scale[0]*=i,r.scale[1]*=i,r.dirty=!0,a=!0,s.stop(e)}}a&&this.painter.refresh(),this._dispatchAgency(this._lastHover,m.MOUSEWHEEL,e),this._mousemoveHandler(e)},mousemove:function(e){if(!this.painter.isLoading()){this._clickThreshold++,e=this._zrenderEventFixed(e),this._lastX=this._mouseX,this._lastY=this._mouseY,this._mouseX=s.getX(e),this._mouseY=s.getY(e);var t=this._mouseX-this._lastX,i=this._mouseY-this._lastY;this._processDragStart(e),this._hasfound=0,this._event=e,this._iterateAndFindHover(),this._hasfound||((!this._draggingTarget||this._lastHover&&this._lastHover!=this._draggingTarget)&&(this._processOutShape(e),this._processDragLeave(e)),this._lastHover=null,this.storage.delHover(),this.painter.clearHover());var n="default";if(this._draggingTarget)this.storage.drift(this._draggingTarget.id,t,i),this._draggingTarget.modSelf(),this.storage.addHover(this._draggingTarget);else if(this._isMouseDown){var a=this.painter.getLayers(),o=!1;for(var r in a)if("hover"!==r){var l=a[r];l.panable&&(n="move",l.position[0]+=t,l.position[1]+=i,o=!0,l.dirty=!0)}o&&this.painter.refresh()}this._draggingTarget||this._hasfound&&this._lastHover.draggable?n="move":this._hasfound&&this._lastHover.clickable&&(n="pointer"),this.root.style.cursor=n,this._dispatchAgency(this._lastHover,m.MOUSEMOVE,e),(this._draggingTarget||this._hasfound||this.storage.hasHoverShape())&&this.painter.refreshHover()}},mouseout:function(e){e=this._zrenderEventFixed(e);var t=e.toElement||e.relatedTarget;if(t!=this.root)for(;t&&9!=t.nodeType;){if(t==this.root)return void this._mousemoveHandler(e);t=t.parentNode}e.zrenderX=this._lastX,e.zrenderY=this._lastY,this.root.style.cursor="default",this._isMouseDown=0,this._processOutShape(e),this._processDrop(e),this._processDragEnd(e),this.painter.isLoading()||this.painter.refreshHover(),this.dispatch(m.GLOBALOUT,e)},mousedown:function(e){return this._clickThreshold=0,2==this._lastDownButton?(this._lastDownButton=e.button,void(this._mouseDownTarget=null)):(this._lastMouseDownMoment=new Date,e=this._zrenderEventFixed(e),this._isMouseDown=1,this._mouseDownTarget=this._lastHover,this._dispatchAgency(this._lastHover,m.MOUSEDOWN,e),void(this._lastDownButton=e.button))},mouseup:function(e){e=this._zrenderEventFixed(e),this.root.style.cursor="default",this._isMouseDown=0,this._clickThreshold=0,this._mouseDownTarget=null,this._dispatchAgency(this._lastHover,m.MOUSEUP,e),this._processDrop(e),this._processDragEnd(e)},touchstart:function(e){e=this._zrenderEventFixed(e,!0),this._lastTouchMoment=new Date,this._mobildFindFixed(e),this._mousedownHandler(e)},touchmove:function(e){e=this._zrenderEventFixed(e,!0),this._mousemoveHandler(e),this._isDragging&&s.stop(e)},touchend:function(e){e=this._zrenderEventFixed(e,!0),this._mouseupHandler(e);var t=new Date;t-this._lastTouchMoment=0;o--){var r=n[o];if(t!==r.zlevel&&(i=this.painter.getLayer(r.zlevel,i),a[0]=this._mouseX,a[1]=this._mouseY,i.needTransform&&(d.invert(e,i.transform),h.applyTransform(a,a,e))),this._findHover(r,a[0],a[1]))break}}}();var U=[{x:10},{x:-20},{x:10,y:10},{y:-20}];return V.prototype._mobildFindFixed=function(e){this._lastHover=null,this._mouseX=e.zrenderX,this._mouseY=e.zrenderY,this._event=e,this._iterateAndFindHover();for(var t=0;!this._lastHover&&td;d++){var p=e[d];if(n!==p.zlevel&&(i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),i=this.getLayer(p.zlevel),o=i.ctx,n=p.zlevel,i.unusedCount=0,(i.dirty||t)&&i.clear(),i.needTransform&&(o.save(),i.setTransform(o))),p.__startClip&&!m){var u=p.__startClip;if(o.save(),u.needTransform){var V=u.transform;s.invert(h,V),o.transform(V[0],V[1],V[2],V[3],V[4],V[5])}if(o.beginPath(),u.buildPath(o,u.style),o.clip(),u.needTransform){var V=h;o.transform(V[0],V[1],V[2],V[3],V[4],V[5])}}if((i.dirty||t)&&!p.invisible&&(!p.onbrush||p.onbrush&&!p.onbrush(o,!1)))if(a.catchBrushException)try{p.brush(o,!1,this.refreshNextFrame)}catch(U){r(U,"brush error of "+p.type,p)}else p.brush(o,!1,this.refreshNextFrame);p.__stopClip&&!m&&o.restore(),p.__dirty=!1}i&&(i.needTransform&&o.restore(),o.flush&&o.flush());for(var l in this._layers)if("hover"!==l){var y=this._layers[l];y.dirty=!1,1==y.unusedCount&&y.clear()}},c.prototype.getLayer=function(e){var t=this._layers[e];if(!t){var i=this._zlevelList.length,n=null,a=-1;if(i>0&&e>this._zlevelList[0]){for(a=0;i-1>a&&!(this._zlevelList[a]e);a++);n=this._layers[this._zlevelList[a]]}this._zlevelList.splice(a+1,0,e),t=new p(e,this);var r=n?n.dom:this._bgDom;r.nextSibling?r.parentNode.insertBefore(t.dom,r.nextSibling):r.parentNode.appendChild(t.dom),t.initContext(),this._layers[e]=t,this._layerConfig[e]&&o.merge(t,this._layerConfig[e],!0),t.updateTransform()}return t},c.prototype.getLayers=function(){return this._layers},c.prototype._updateLayerStatus=function(e){var t=this._layers,i={};for(var n in t)"hover"!==n&&(i[n]=t[n].elCount,t[n].elCount=0);for(var a=0,o=e.length;o>a;a++){var r=e[a],s=r.zlevel,l=t[s];if(l){if(l.elCount++,l.dirty)continue;l.dirty=r.__dirty}}for(var n in t)"hover"!==n&&i[n]!==t[n].elCount&&(t[n].dirty=!0)},c.prototype.refreshShapes=function(e,t){for(var i=0,n=e.length;n>i;i++){var a=e[i];a.modSelf()}return this.refresh(t),this},c.prototype.setLoadingEffect=function(e){return this._loadingEffect=e,this},c.prototype.clear=function(){for(var e in this._layers)"hover"!=e&&this._layers[e].clear();return this},c.prototype.modLayer=function(e,t){if(t){this._layerConfig[e]?o.merge(this._layerConfig[e],t,!0):this._layerConfig[e]=t;var i=this._layers[e];i&&o.merge(i,this._layerConfig[e],!0)}},c.prototype.delLayer=function(e){var t=this._layers[e];t&&(this.modLayer(e,{position:t.position,rotation:t.rotation,scale:t.scale}),t.dom.parentNode.removeChild(t.dom),delete this._layers[e],this._zlevelList.splice(o.indexOf(this._zlevelList,e),1))},c.prototype.refreshHover=function(){this.clearHover();for(var e=this.storage.getHoverShapes(!0),t=0,i=e.length;i>t;t++)this._brushHover(e[t]);var n=this._layers.hover.ctx;return n.flush&&n.flush(),this.storage.delHover(),this},c.prototype.clearHover=function(){var e=this._layers.hover;return e&&e.clear(),this},c.prototype.showLoading=function(e){return this._loadingEffect&&this._loadingEffect.stop(),e&&this.setLoadingEffect(e),this._loadingEffect.start(this),this.loading=!0,this},c.prototype.hideLoading=function(){return this._loadingEffect.stop(),this.clearHover(),this.loading=!1,this},c.prototype.isLoading=function(){return this.loading},c.prototype.resize=function(){var e=this._domRoot;e.style.display="none";var t=this._getWidth(),i=this._getHeight();if(e.style.display="",this._width!=t||i!=this._height){this._width=t,this._height=i,e.style.width=t+"px",e.style.height=i+"px";for(var n in this._layers)this._layers[n].resize(t,i);this.refresh(null,!0)}return this},c.prototype.clearLayer=function(e){var t=this._layers[e];t&&t.clear()},c.prototype.dispose=function(){this.isLoading()&&this.hideLoading(),this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},c.prototype.getDomHover=function(){return this._layers.hover.dom},c.prototype.toDataURL=function(e,t,i){if(m)return null;var o=n("image","canvas",this);this._bgDom.appendChild(o);var s=o.getContext("2d");1!=d&&s.scale(d,d),s.fillStyle=t||"#fff",s.rect(0,0,this._width*d,this._height*d),s.fill();var l=this;this.storage.iterShape(function(e){if(!e.invisible&&(!e.onbrush||e.onbrush&&!e.onbrush(s,!1)))if(a.catchBrushException)try{e.brush(s,!1,l.refreshNextFrame)}catch(t){r(t,"brush error of "+e.type,e)}else e.brush(s,!1,l.refreshNextFrame)},{normal:"up",update:!0});var h=o.toDataURL(e,i);return s=null,this._bgDom.removeChild(o),h},c.prototype.getWidth=function(){return this._width},c.prototype.getHeight=function(){return this._height},c.prototype._getWidth=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientWidth||parseInt(t.width,10))-parseInt(t.paddingLeft,10)-parseInt(t.paddingRight,10)).toFixed(0)-0},c.prototype._getHeight=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientHeight||parseInt(t.height,10))-parseInt(t.paddingTop,10)-parseInt(t.paddingBottom,10)).toFixed(0)-0},c.prototype._brushHover=function(e){var t=this._layers.hover.ctx;if(!e.onbrush||e.onbrush&&!e.onbrush(t,!0)){var i=this.getLayer(e.zlevel);if(i.needTransform&&(t.save(),i.setTransform(t)),a.catchBrushException)try{e.brush(t,!0,this.refreshNextFrame)}catch(n){r(n,"hoverBrush error of "+e.type,e)}else e.brush(t,!0,this.refreshNextFrame);i.needTransform&&t.restore()}},c.prototype._shapeToImage=function(t,i,n,a,o){var r=document.createElement("canvas"),s=r.getContext("2d"),o=window.devicePixelRatio||1;r.style.width=n+"px",r.style.height=a+"px",r.setAttribute("width",n*o),r.setAttribute("height",a*o),s.clearRect(0,0,n*o,a*o);var l={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],i&&i.brush(s,!1);var h=e("./shape/Image"),d=new h({id:t,style:{x:0,y:0,image:r}});return null!=l.position&&(d.position=i.position=l.position),null!=l.rotation&&(d.rotation=i.rotation=l.rotation),null!=l.scale&&(d.scale=i.scale=l.scale),d},c.prototype._createShapeToImageProcessor=function(){if(m)return i;var e=this;return function(t,i,n,a){return e._shapeToImage(t,i,n,a,d)}};var p=function(e,i){this.dom=n(e,"canvas",i),this.dom.onselectstart=t,this.dom.style["-webkit-user-select"]="none",this.dom.style["user-select"]="none",this.dom.style["-webkit-touch-callout"]="none",m&&m.initElement(this.dom),this.domBack=null,this.ctxBack=null,this.painter=i,this.unusedCount=0,this.config=null,this.dirty=!0,this.elCount=0,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.zoomable=!1,this.panable=!1,this.maxZoom=1/0,this.minZoom=0,h.call(this)};return p.prototype.initContext=function(){this.ctx=this.dom.getContext("2d"),1!=d&&this.ctx.scale(d,d)},p.prototype.createBackBuffer=function(){m||(this.domBack=n("back-"+this.id,"canvas",this.painter),this.ctxBack=this.domBack.getContext("2d"),1!=d&&this.ctxBack.scale(d,d))},p.prototype.resize=function(e,t){this.dom.style.width=e+"px",this.dom.style.height=t+"px",this.dom.setAttribute("width",e*d),this.dom.setAttribute("height",t*d),1!=d&&this.ctx.scale(d,d),this.domBack&&(this.domBack.setAttribute("width",e*d),this.domBack.setAttribute("height",t*d),1!=d&&this.ctxBack.scale(d,d))},p.prototype.clear=function(){var e=this.dom,t=this.ctx,i=e.width,n=e.height,a=this.clearColor&&!m,o=this.motionBlur&&!m,r=this.lastFrameAlpha;if(o&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(e,0,0,i/d,n/d)),a?(t.save(),t.fillStyle=this.config.clearColor,t.fillRect(0,0,i/d,n/d),t.restore()):t.clearRect(0,0,i/d,n/d),o){var s=this.domBack;t.save(),t.globalAlpha=r,t.drawImage(s,0,0,i/d,n/d),t.restore()}},o.merge(p.prototype,h.prototype),c}),define("zrender/Storage",["require","./tool/util","./Group"],function(e){"use strict";function t(e,t){return e.zlevel==t.zlevel?e.z==t.z?e.__renderidx-t.__renderidx:e.z-t.z:e.zlevel-t.zlevel}var i=e("./tool/util"),n=e("./Group"),a={hover:!1,normal:"down",update:!1},o=function(){this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],this._shapeListOffset=0};return o.prototype.iterShape=function(e,t){if(t||(t=a),t.hover)for(var i=0,n=this._hoverElements.length;n>i;i++){var o=this._hoverElements[i];if(o.updateTransform(),e(o))return this}switch(t.update&&this.updateShapeList(),t.normal){case"down":for(var n=this._shapeList.length;n--;)if(e(this._shapeList[n]))return this;break;default:for(var i=0,n=this._shapeList.length;n>i;i++)if(e(this._shapeList[i]))return this}return this},o.prototype.getHoverShapes=function(e){for(var i=[],n=0,a=this._hoverElements.length;a>n;n++){i.push(this._hoverElements[n]);var o=this._hoverElements[n].hoverConnect;if(o){var r;o=o instanceof Array?o:[o];for(var s=0,l=o.length;l>s;s++)r=o[s].id?o[s]:this.get(o[s]),r&&i.push(r)}}if(i.sort(t),e)for(var n=0,a=i.length;a>n;n++)i[n].updateTransform();return i},o.prototype.getShapeList=function(e){return e&&this.updateShapeList(),this._shapeList},o.prototype.updateShapeList=function(){this._shapeListOffset=0;for(var e=0,i=this._roots.length;i>e;e++){var n=this._roots[e];this._updateAndAddShape(n)}this._shapeList.length=this._shapeListOffset;for(var e=0,i=this._shapeList.length;i>e;e++)this._shapeList[e].__renderidx=e;this._shapeList.sort(t)},o.prototype._updateAndAddShape=function(e,t){if(!e.ignore)if(e.updateTransform(),"group"==e.type){e.clipShape&&(e.clipShape.parent=e,e.clipShape.updateTransform(),t?(t=t.slice(),t.push(e.clipShape)):t=[e.clipShape]);for(var i=0;i0},o.prototype.addRoot=function(e){e instanceof n&&e.addChildrenToStorage(this),this.addToMap(e),this._roots.push(e)},o.prototype.delRoot=function(e){if("undefined"==typeof e){for(var t=0;tt;t++)this.delRoot(e[t]);else{var r;r="string"==typeof e?this._elements[e]:e;var s=i.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof n&&r.delChildrenFromStorage(this))}},o.prototype.addToMap=function(e){return e instanceof n&&(e._storage=this),e.modSelf(),this._elements[e.id]=e,this},o.prototype.get=function(e){return this._elements[e]},o.prototype.delFromMap=function(e){var t=this._elements[e];return t&&(delete this._elements[e],t instanceof n&&(t._storage=null)),this},o.prototype.dispose=function(){this._elements=this._renderList=this._roots=this._hoverElements=null},o}),define("zrender/animation/Animation",["require","./Clip","../tool/color","../tool/util","../tool/event"],function(e){"use strict";function t(e,t){return e[t]}function i(e,t,i){e[t]=i}function n(e,t,i){return(t-e)*i+e}function a(e,t,i,a,o){var r=e.length;if(1==o)for(var s=0;r>s;s++)a[s]=n(e[s],t[s],i);else for(var l=e[0].length,s=0;r>s;s++)for(var h=0;l>h;h++)a[s][h]=n(e[s][h],t[s][h],i)}function o(e){switch(typeof e){case"undefined":case"string":return!1}return"undefined"!=typeof e.length}function r(e,t,i,n,a,o,r,l,h){var d=e.length;if(1==h)for(var m=0;d>m;m++)l[m]=s(e[m],t[m],i[m],n[m],a,o,r);else for(var c=e[0].length,m=0;d>m;m++)for(var p=0;c>p;p++)l[m][p]=s(e[m][p],t[m][p],i[m][p],n[m][p],a,o,r)}function s(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}function l(e){if(o(e)){var t=e.length;if(o(e[0])){for(var i=[],n=0;t>n;n++)i.push(V.call(e[n]));return i}return V.call(e)}return e}function h(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Math.floor(e[2]),"rgba("+e.join(",")+")"}var d=e("./Clip"),m=e("../tool/color"),c=e("../tool/util"),p=e("../tool/event").Dispatcher,u=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},V=Array.prototype.slice,U=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0,p.call(this)};U.prototype={add:function(e){this._clips.push(e)},remove:function(e){var t=c.indexOf(this._clips,e);t>=0&&this._clips.splice(t,1)},_update:function(){for(var e=(new Date).getTime(),t=e-this._time,i=this._clips,n=i.length,a=[],o=[],r=0;n>r;r++){var s=i[r],l=s.step(e);l&&(a.push(l),o.push(s))}this.stage.update&&this.stage.update();for(var r=0;n>r;)i[r]._needsRemove?(i[r]=i[n-1],i.pop(),n--):r++;n=a.length;for(var r=0;n>r;r++)o[r].fire(a[r]);this._time=e,this.onframe(t),this.dispatch("frame",t)},start:function(){function e(){t._running&&(t._update(),u(e))}var t=this;this._running=!0,this._time=(new Date).getTime(),u(e)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var i=new y(e,t.loop,t.getter,t.setter);return i.animation=this,i},constructor:U},c.merge(U.prototype,p.prototype,!0);var y=function(e,n,a,o){this._tracks={},this._target=e,this._loop=n||!1,this._getter=a||t,this._setter=o||i,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};return y.prototype={when:function(e,t){for(var i in t)this._tracks[i]||(this._tracks[i]=[],0!==e&&this._tracks[i].push({time:0,value:l(this._getter(this._target,i))})),this._tracks[i].push({time:parseInt(e,10),value:t[i]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var t=this,i=this._setter,l=this._getter,c="spline"===e,p=function(){if(t._clipCount--,0===t._clipCount){t._tracks={};for(var e=t._doneList.length,i=0;e>i;i++)t._doneList[i].call(t)}},u=function(u,V){var U=u.length;if(U){var y=u[0].value,g=o(y),f=!1,b=g&&o(y[0])?2:1;u.sort(function(e,t){return e.time-t.time});var _;if(U){_=u[U-1].time;for(var x=[],k=[],L=0;U>L;L++){x.push(u[L].time/_);var v=u[L].value;"string"==typeof v&&(v=m.toArray(v),0===v.length&&(v[0]=v[1]=v[2]=0,v[3]=1),f=!0),k.push(v)}var W,L,w,X,I,K,S,T=0,C=0;if(f)var E=[0,0,0,0];var A=function(e,o){if(C>o){for(W=Math.min(T+1,U-1),L=W;L>=0&&!(x[L]<=o);L--);L=Math.min(L,U-2)}else{for(L=T;U>L&&!(x[L]>o);L++);L=Math.min(L-1,U-2)}T=L,C=o;var d=x[L+1]-x[L];if(0!==d){if(w=(o-x[L])/d,c)if(I=k[L],X=k[0===L?L:L-1],K=k[L>U-2?U-1:L+1],S=k[L>U-3?U-1:L+2],g)r(X,I,K,S,w,w*w,w*w*w,l(e,V),b);else{var m;f?(m=r(X,I,K,S,w,w*w,w*w*w,E,1),m=h(E)):m=s(X,I,K,S,w,w*w,w*w*w),i(e,V,m)}else if(g)a(k[L],k[L+1],w,l(e,V),b);else{var m;f?(a(k[L],k[L+1],w,E,1),m=h(E)):m=n(k[L],k[L+1],w),i(e,V,m)}for(L=0;L=t[1]&&(e=t[1]),e},t.prototype.getLocation=function(e,t,i){var n=null!=e.x?e.x:"center";switch(n){case"center":n=Math.floor((this.canvasWidth-t)/2);break;case"left":n=0;break;case"right":n=this.canvasWidth-t}var a=null!=e.y?e.y:"center";switch(a){case"center":a=Math.floor((this.canvasHeight-i)/2);break;case"top":a=0;break;case"bottom":a=this.canvasHeight-i}return{x:n,y:a,width:t,height:i}},t}),define("zrender/mixin/Transformable",["require","../tool/matrix","../tool/vector"],function(e){"use strict";function t(e){return e>-r&&r>e}function i(e){return e>r||-r>e}var n=e("../tool/matrix"),a=e("../tool/vector"),o=[0,0],r=5e-5,s=function(){this.position||(this.position=[0,0]),"undefined"==typeof this.rotation&&(this.rotation=[0,0,0]),this.scale||(this.scale=[1,1,0,0]),this.needLocalTransform=!1,this.needTransform=!1};return s.prototype={constructor:s,updateNeedTransform:function(){this.needLocalTransform=i(this.rotation[0])||i(this.position[0])||i(this.position[1])||i(this.scale[0]-1)||i(this.scale[1]-1)},updateTransform:function(){if(this.updateNeedTransform(),this.needTransform=this.parent?this.needLocalTransform||this.parent.needTransform:this.needLocalTransform,this.needTransform){var e=this.transform||n.create();if(n.identity(e),this.needLocalTransform){if(i(this.scale[0])||i(this.scale[1])){o[0]=-this.scale[2]||0,o[1]=-this.scale[3]||0;var t=i(o[0])||i(o[1]);t&&n.translate(e,e,o),n.scale(e,e,this.scale),t&&(o[0]=-o[0],o[1]=-o[1],n.translate(e,e,o))}if(this.rotation instanceof Array){if(0!==this.rotation[0]){o[0]=-this.rotation[1]||0,o[1]=-this.rotation[2]||0;var t=i(o[0])||i(o[1]);t&&n.translate(e,e,o),n.rotate(e,e,this.rotation[0]),t&&(o[0]=-o[0],o[1]=-o[1],n.translate(e,e,o))}}else 0!==this.rotation&&n.rotate(e,e,this.rotation);(i(this.position[0])||i(this.position[1]))&&n.translate(e,e,this.position)}this.transform=e,this.parent&&this.parent.needTransform&&(this.needLocalTransform?n.mul(this.transform,this.parent.transform,this.transform):n.copy(this.transform,this.parent.transform))}},setTransform:function(e){if(this.needTransform){var t=this.transform;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},lookAt:function(){var e=a.create();return function(i){this.transform||(this.transform=n.create());var o=this.transform;a.sub(e,i,this.position),t(e[0])&&t(e[1])||(a.normalize(e,e),o[2]=e[0]*this.scale[1],o[3]=e[1]*this.scale[1],o[0]=e[1]*this.scale[0],o[1]=-e[0]*this.scale[0],o[4]=this.position[0],o[5]=this.position[1],this.decomposeTransform())}}(),decomposeTransform:function(){if(this.transform){var e=this.transform,t=e[0]*e[0]+e[1]*e[1],n=this.position,a=this.scale,o=this.rotation;i(t-1)&&(t=Math.sqrt(t));var r=e[2]*e[2]+e[3]*e[3];i(r-1)&&(r=Math.sqrt(r)),n[0]=e[4],n[1]=e[5],a[0]=t,a[1]=r,a[2]=a[3]=0,o[0]=Math.atan2(-e[1]/r,e[0]/t),o[1]=o[2]=0}}},s}),define("zrender/shape/Text",["require","../tool/area","./Base","../tool/util"],function(e){var t=e("../tool/area"),i=e("./Base"),n=function(e){i.call(this,e)};return n.prototype={type:"text",brush:function(e,i){var n=this.style;if(i&&(n=this.getHighlightStyle(n,this.highlightStyle||{})),"undefined"!=typeof n.text&&n.text!==!1){e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.textFont&&(e.font=n.textFont),e.textAlign=n.textAlign||"start",e.textBaseline=n.textBaseline||"middle";var a,o=(n.text+"").split("\n"),r=t.getTextHeight("国",n.textFont),s=this.getRect(n),l=n.x;a="top"==n.textBaseline?s.y:"bottom"==n.textBaseline?s.y+r:s.y+r/2;for(var h=0,d=o.length;d>h;h++){if(n.maxWidth)switch(n.brushType){case"fill":e.fillText(o[h],l,a,n.maxWidth);break;case"stroke":e.strokeText(o[h],l,a,n.maxWidth);break;case"both":e.fillText(o[h],l,a,n.maxWidth),e.strokeText(o[h],l,a,n.maxWidth);break;default:e.fillText(o[h],l,a,n.maxWidth)}else switch(n.brushType){case"fill":e.fillText(o[h],l,a);break;case"stroke":e.strokeText(o[h],l,a);break;case"both":e.fillText(o[h],l,a),e.strokeText(o[h],l,a);break;default:e.fillText(o[h],l,a)}a+=r}e.restore()}},getRect:function(e){if(e.__rect)return e.__rect;var i=t.getTextWidth(e.text,e.textFont),n=t.getTextHeight(e.text,e.textFont),a=e.x;"end"==e.textAlign||"right"==e.textAlign?a-=i:"center"==e.textAlign&&(a-=i/2);var o;return o="top"==e.textBaseline?e.y:"bottom"==e.textBaseline?e.y-n:e.y-n/2,e.__rect={x:a,y:o,width:i,height:n},e.__rect}},e("../tool/util").inherits(n,i),n}),define("zrender/shape/Rectangle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"rectangle",_buildRadiusPath:function(e,t){var i,n,a,o,r=t.x,s=t.y,l=t.width,h=t.height,d=t.radius;"number"==typeof d?i=n=a=o=d:d instanceof Array?1===d.length?i=n=a=o=d[0]:2===d.length?(i=a=d[0],n=o=d[1]):3===d.length?(i=d[0],n=o=d[1],a=d[2]):(i=d[0],n=d[1],a=d[2],o=d[3]):i=n=a=o=0;var m;i+n>l&&(m=i+n,i*=l/m,n*=l/m),a+o>l&&(m=a+o,a*=l/m,o*=l/m),n+a>h&&(m=n+a,n*=h/m,a*=h/m),i+o>h&&(m=i+o,i*=h/m,o*=h/m),e.moveTo(r+i,s),e.lineTo(r+l-n,s),0!==n&&e.quadraticCurveTo(r+l,s,r+l,s+n),e.lineTo(r+l,s+h-a),0!==a&&e.quadraticCurveTo(r+l,s+h,r+l-a,s+h),e.lineTo(r+o,s+h),0!==o&&e.quadraticCurveTo(r,s+h,r,s+h-o),e.lineTo(r,s+i),0!==i&&e.quadraticCurveTo(r,s,r+i,s)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y)),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t},e.__rect}},e("../tool/util").inherits(i,t),i}),define("zrender/tool/area",["require","./util","./curve"],function(e){"use strict";function t(e){return e%=T,0>e&&(e+=T),e}function i(e,t,i,o){if(!t||!e)return!1;var r=e.type;L=L||v.getContext();var s=n(e,t,i,o);if("undefined"!=typeof s)return s;if(e.buildPath&&L.isPointInPath)return a(e,L,t,i,o);switch(r){case"ellipse":return!0;case"trochoid":var l="out"==t.location?t.r1+t.r2+t.d:t.r1-t.r2+t.d;return p(t,i,o,l);case"rose":return p(t,i,o,t.maxr);default:return!1}}function n(e,t,i,n){var a=e.type;switch(a){case"bezier-curve":return"undefined"==typeof t.cpX2?l(t.xStart,t.yStart,t.cpX1,t.cpY1,t.xEnd,t.yEnd,t.lineWidth,i,n):s(t.xStart,t.yStart,t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd,t.lineWidth,i,n);case"line":return r(t.xStart,t.yStart,t.xEnd,t.yEnd,t.lineWidth,i,n);case"broken-line":return d(t.pointList,t.lineWidth,i,n);case"ring":return m(t.x,t.y,t.r0,t.r,i,n);case"circle":return p(t.x,t.y,t.r,i,n);case"sector":var o=t.startAngle*Math.PI/180,h=t.endAngle*Math.PI/180;return t.clockWise||(o=-o,h=-h),u(t.x,t.y,t.r0,t.r,o,h,!t.clockWise,i,n);case"path":return _(t.pathArray,Math.max(t.lineWidth,5),t.brushType,i,n);case"polygon":case"star":case"isogon":return V(t.pointList,i,n);case"text":var U=t.__rect||e.getRect(t);return c(U.x,U.y,U.width,U.height,i,n);case"rectangle":case"image":return c(t.x,t.y,t.width,t.height,i,n)}}function a(e,t,i,n,a){return t.beginPath(),e.buildPath(t,i),t.closePath(),t.isPointInPath(n,a)}function o(e,t,n,a){return!i(e,t,n,a)}function r(e,t,i,n,a,o,r){if(0===a)return!1;var s=Math.max(a,5),l=0,h=e;if(r>t+s&&r>n+s||t-s>r&&n-s>r||o>e+s&&o>i+s||e-s>o&&i-s>o)return!1;if(e===i)return Math.abs(o-e)<=s/2;l=(t-n)/(e-i),h=(e*n-i*t)/(e-i);var d=l*o-r+h,m=d*d/(l*l+1);return s/2*s/2>=m}function s(e,t,i,n,a,o,r,s,l,h,d){if(0===l)return!1;var m=Math.max(l,5);if(d>t+m&&d>n+m&&d>o+m&&d>s+m||t-m>d&&n-m>d&&o-m>d&&s-m>d||h>e+m&&h>i+m&&h>a+m&&h>r+m||e-m>h&&i-m>h&&a-m>h&&r-m>h)return!1;var c=W.cubicProjectPoint(e,t,i,n,a,o,r,s,h,d,null);return m/2>=c}function l(e,t,i,n,a,o,r,s,l){if(0===r)return!1;var h=Math.max(r,5);if(l>t+h&&l>n+h&&l>o+h||t-h>l&&n-h>l&&o-h>l||s>e+h&&s>i+h&&s>a+h||e-h>s&&i-h>s&&a-h>s)return!1;var d=W.quadraticProjectPoint(e,t,i,n,a,o,s,l,null);return h/2>=d}function h(e,i,n,a,o,r,s,l,h){if(0===s)return!1;var d=Math.max(s,5);l-=e,h-=i;var m=Math.sqrt(l*l+h*h);if(m-d>n||n>m+d)return!1;if(Math.abs(a-o)>=T)return!0;if(r){var c=a;a=t(o),o=t(c)}else a=t(a),o=t(o);a>o&&(o+=T);var p=Math.atan2(h,l);return 0>p&&(p+=T),p>=a&&o>=p||p+T>=a&&o>=p+T}function d(e,t,i,n){for(var t=Math.max(t,10),a=0,o=e.length-1;o>a;a++){var s=e[a][0],l=e[a][1],h=e[a+1][0],d=e[a+1][1];if(r(s,l,h,d,t,i,n))return!0}return!1}function m(e,t,i,n,a,o){var r=(a-e)*(a-e)+(o-t)*(o-t);return n*n>r&&r>i*i}function c(e,t,i,n,a,o){return a>=e&&e+i>=a&&o>=t&&t+n>=o}function p(e,t,i,n,a){return i*i>(n-e)*(n-e)+(a-t)*(a-t)}function u(e,t,i,n,a,o,r,s,l){return h(e,t,(i+n)/2,a,o,r,n-i,s,l)}function V(e,t,i){for(var n=e.length,a=0,o=0,r=n-1;n>o;o++){var s=e[r][0],l=e[r][1],h=e[o][0],d=e[o][1];a+=U(s,l,h,d,t,i),r=o}return 0!==a}function U(e,t,i,n,a,o){if(o>t&&o>n||t>o&&n>o)return 0;if(n==t)return 0;var r=t>n?1:-1,s=(o-t)/(n-t),l=s*(i-e)+e;return l>a?r:0}function y(){var e=E[0];E[0]=E[1],E[1]=e}function g(e,t,i,n,a,o,r,s,l,h){if(h>t&&h>n&&h>o&&h>s||t>h&&n>h&&o>h&&s>h)return 0;var d=W.cubicRootAt(t,n,o,s,h,C);if(0===d)return 0;for(var m,c,p=0,u=-1,V=0;d>V;V++){var U=C[V],g=W.cubicAt(e,i,a,r,U);l>g||(0>u&&(u=W.cubicExtrema(t,n,o,s,E),E[1]1&&y(),m=W.cubicAt(t,n,o,s,E[0]),u>1&&(c=W.cubicAt(t,n,o,s,E[1]))),p+=2==u?Um?1:-1:Uc?1:-1:c>s?1:-1:Um?1:-1:m>s?1:-1)}return p}function f(e,t,i,n,a,o,r,s){if(s>t&&s>n&&s>o||t>s&&n>s&&o>s)return 0;var l=W.quadraticRootAt(t,n,o,s,C);if(0===l)return 0;var h=W.quadraticExtremum(t,n,o);if(h>=0&&1>=h){for(var d=0,m=W.quadraticAt(t,n,o,h),c=0;l>c;c++){var p=W.quadraticAt(e,i,a,C[c]);p>r||(d+=C[c]m?1:-1:m>o?1:-1)}return d}var p=W.quadraticAt(e,i,a,C[0]);return p>r?0:t>o?1:-1}function b(e,i,n,a,o,r,s,l){if(l-=i,l>n||-n>l)return 0;var h=Math.sqrt(n*n-l*l);if(C[0]=-h,C[1]=h,Math.abs(a-o)>=T){a=0,o=T;var d=r?1:-1;return s>=C[0]+e&&s<=C[1]+e?d:0}if(r){var h=a;a=t(o),o=t(h)}else a=t(a),o=t(o);a>o&&(o+=T);for(var m=0,c=0;2>c;c++){var p=C[c];if(p+e>s){var u=Math.atan2(l,p),d=r?1:-1;0>u&&(u=T+u),(u>=a&&o>=u||u+T>=a&&o>=u+T)&&(u>Math.PI/2&&u<1.5*Math.PI&&(d=-d),m+=d)}}return m}function _(e,t,i,n,a){var o=0,d=0,m=0,c=0,p=0,u=!0,V=!0;i=i||"fill";for(var y="stroke"===i||"both"===i,_="fill"===i||"both"===i,x=0;x0&&(_&&(o+=U(d,m,c,p,n,a)),0!==o))return!0;c=L[L.length-2],p=L[L.length-1],u=!1,V&&"A"!==k.command&&(V=!1,d=c,m=p)}switch(k.command){case"M":d=L[0],m=L[1];break;case"L":if(y&&r(d,m,L[0],L[1],t,n,a))return!0;_&&(o+=U(d,m,L[0],L[1],n,a)),d=L[0],m=L[1];break;case"C":if(y&&s(d,m,L[0],L[1],L[2],L[3],L[4],L[5],t,n,a))return!0;_&&(o+=g(d,m,L[0],L[1],L[2],L[3],L[4],L[5],n,a)),d=L[4],m=L[5];break;case"Q":if(y&&l(d,m,L[0],L[1],L[2],L[3],t,n,a))return!0;_&&(o+=f(d,m,L[0],L[1],L[2],L[3],n,a)),d=L[2],m=L[3];break;case"A":var v=L[0],W=L[1],w=L[2],X=L[3],I=L[4],K=L[5],S=Math.cos(I)*w+v,T=Math.sin(I)*X+W;V?(V=!1,c=S,p=T):o+=U(d,m,S,T);var C=(n-v)*X/w+v;if(y&&h(v,W,X,I,I+K,1-L[7],t,C,a))return!0;_&&(o+=b(v,W,X,I,I+K,1-L[7],C,a)),d=Math.cos(I+K)*w+v,m=Math.sin(I+K)*X+W;break;case"z":if(y&&r(d,m,c,p,t,n,a))return!0;u=!0}}return _&&(o+=U(d,m,c,p,n,a)),0!==o}function x(e,t){var i=e+":"+t;if(w[i])return w[i];L=L||v.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");for(var n=0,a=0,o=e.length;o>a;a++)n=Math.max(L.measureText(e[a]).width,n);return L.restore(),w[i]=n,++I>S&&(I=0,w={}),n}function k(e,t){var i=e+":"+t;if(X[i])return X[i];L=L||v.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");var n=(L.measureText("国").width+2)*e.length;return L.restore(),X[i]=n,++K>S&&(K=0,X={}),n}var L,v=e("./util"),W=e("./curve"),w={},X={},I=0,K=0,S=5e3,T=2*Math.PI,C=[-1,-1,-1],E=[-1,-1];return{isInside:i,isOutside:o,getTextWidth:x,getTextHeight:k,isInsidePath:_,isInsidePolygon:V,isInsideSector:u,isInsideCircle:p,isInsideLine:r,isInsideRect:c,isInsideBrokenLine:d,isInsideCubicStroke:s,isInsideQuadraticStroke:l}}),define("zrender/shape/Base",["require","../tool/matrix","../tool/guid","../tool/util","../tool/log","../mixin/Transformable","../mixin/Eventful","../tool/area","../tool/color"],function(e){function t(t,n,a,o,r,s,l){r&&(t.font=r),t.textAlign=s,t.textBaseline=l;var h=i(n,a,o,r,s,l);n=(n+"").split("\n");var d=e("../tool/area").getTextHeight("国",r);switch(l){case"top":o=h.y;break;case"bottom":o=h.y+d;break;default:o=h.y+d/2}for(var m=0,c=n.length;c>m;m++)t.fillText(n[m],a,o),o+=d}function i(t,i,n,a,o,r){var s=e("../tool/area"),l=s.getTextWidth(t,a),h=s.getTextHeight("国",a);switch(t=(t+"").split("\n"),o){case"end":case"right":i-=l;break;case"center":i-=l/2}switch(r){case"top":break;case"bottom":n-=h*t.length;break;default:n-=h*t.length/2}return{x:i,y:n,width:l,height:h*t.length}}var n=window.G_vmlCanvasManager,a=e("../tool/matrix"),o=e("../tool/guid"),r=e("../tool/util"),s=e("../tool/log"),l=e("../mixin/Transformable"),h=e("../mixin/Eventful"),d=function(e){e=e||{},this.id=e.id||o();for(var t in e)this[t]=e[t];this.style=this.style||{},this.highlightStyle=this.highlightStyle||null,this.parent=null,this.__dirty=!0,this.__clipShapes=[],l.call(this),h.call(this)};d.prototype.invisible=!1,d.prototype.ignore=!1,d.prototype.zlevel=0,d.prototype.draggable=!1,d.prototype.clickable=!1,d.prototype.hoverable=!0,d.prototype.z=0,d.prototype.brush=function(e,t){var i=this.beforeBrush(e,t);switch(e.beginPath(),this.buildPath(e,i),i.brushType){case"both":e.fill();case"stroke":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},d.prototype.beforeBrush=function(e,t){var i=this.style;return this.brushTypeOnly&&(i.brushType=this.brushTypeOnly),t&&(i=this.getHighlightStyle(i,this.highlightStyle||{},this.brushTypeOnly)),"stroke"==this.brushTypeOnly&&(i.strokeColor=i.strokeColor||i.color),e.save(),this.doClip(e),this.setContext(e,i),this.setTransform(e),i},d.prototype.afterBrush=function(e){e.restore()};var m=[["color","fillStyle"],["strokeColor","strokeStyle"],["opacity","globalAlpha"],["lineCap","lineCap"],["lineJoin","lineJoin"],["miterLimit","miterLimit"],["lineWidth","lineWidth"],["shadowBlur","shadowBlur"],["shadowColor","shadowColor"],["shadowOffsetX","shadowOffsetX"],["shadowOffsetY","shadowOffsetY"]];d.prototype.setContext=function(e,t){for(var i=0,n=m.length;n>i;i++){var a=m[i][0],o=t[a],r=m[i][1];"undefined"!=typeof o&&(e[r]=o)}};var c=a.create();return d.prototype.doClip=function(e){if(this.__clipShapes&&!n)for(var t=0;t=a.x&&t<=a.x+a.width&&i>=a.y&&i<=a.y+a.height?e("../tool/area").isInside(this,this.style,t,i):!1},d.prototype.drawText=function(e,i,n){if("undefined"!=typeof i.text&&i.text!==!1){var a=i.textColor||i.color||i.strokeColor;e.fillStyle=a;var o,r,s,l,h=10,d=i.textPosition||this.textPosition||"top";switch(d){case"inside":case"top":case"bottom":case"left":case"right":if(this.getRect){var m=(n||i).__rect||this.getRect(n||i);switch(d){case"inside":s=m.x+m.width/2,l=m.y+m.height/2,o="center",r="middle","stroke"!=i.brushType&&a==i.color&&(e.fillStyle="#fff");break;case"left":s=m.x-h,l=m.y+m.height/2,o="end",r="middle";break;case"right":s=m.x+m.width+h,l=m.y+m.height/2,o="start",r="middle";break;case"top":s=m.x+m.width/2,l=m.y-h,o="center",r="bottom";break;case"bottom":s=m.x+m.width/2,l=m.y+m.height+h,o="center",r="top"}}break;case"start":case"end":var c,p,u,V;if("undefined"!=typeof i.pointList){var U=i.pointList;if(U.length<2)return;var y=U.length;switch(d){case"start":c=U[0][0],p=U[1][0],u=U[0][1],V=U[1][1];break;case"end":c=U[y-2][0],p=U[y-1][0],u=U[y-2][1],V=U[y-1][1]}}else c=i.xStart||0,p=i.xEnd||0,u=i.yStart||0,V=i.yEnd||0;switch(d){case"start":o=p>c?"end":"start",r=V>u?"bottom":"top",s=c,l=u;break;case"end":o=p>c?"start":"end",r=V>u?"top":"bottom",s=p,l=V}h-=4,c!=p?s-="end"==o?h:-h:o="center",u!=V?l-="bottom"==r?h:-h:r="middle";break;case"specific":s=i.textX||0,l=i.textY||0,o="start",r="middle"}null!=s&&null!=l&&t(e,i.text,s,l,i.textFont,i.textAlign||o,i.textBaseline||r)}},d.prototype.modSelf=function(){this.__dirty=!0,this.style&&(this.style.__rect=null),this.highlightStyle&&(this.highlightStyle.__rect=null)},d.prototype.isSilent=function(){return!(this.hoverable||this.draggable||this.clickable||this.onmousemove||this.onmouseover||this.onmouseout||this.onmousedown||this.onmouseup||this.onclick||this.ondragenter||this.ondragover||this.ondragleave||this.ondrop)},r.merge(d.prototype,l.prototype,!0),r.merge(d.prototype,h.prototype,!0),d}),define("zrender/tool/curve",["require","./vector"],function(e){function t(e){return e>-V&&V>e}function i(e){return e>V||-V>e}function n(e,t,i,n,a){var o=1-a;return o*o*(o*e+3*a*t)+a*a*(a*n+3*o*i)}function a(e,t,i,n,a){var o=1-a;return 3*(((t-e)*o+2*(i-t)*a)*o+(n-i)*a*a)}function o(e,i,n,a,o,r){var s=a+3*(i-n)-e,l=3*(n-2*i+e),h=3*(i-e),d=e-o,m=l*l-3*s*h,c=l*h-9*s*d,p=h*h-3*l*d,u=0;if(t(m)&&t(c))if(t(l))r[0]=0;else{var V=-h/l;V>=0&&1>=V&&(r[u++]=V)}else{var g=c*c-4*m*p;if(t(g)){var f=c/m,V=-l/s+f,b=-f/2;V>=0&&1>=V&&(r[u++]=V),b>=0&&1>=b&&(r[u++]=b)}else if(g>0){var _=Math.sqrt(g),x=m*l+1.5*s*(-c+_),k=m*l+1.5*s*(-c-_);x=0>x?-Math.pow(-x,y):Math.pow(x,y),k=0>k?-Math.pow(-k,y):Math.pow(k,y);var V=(-l-(x+k))/(3*s);V>=0&&1>=V&&(r[u++]=V)}else{var L=(2*m*l-3*s*c)/(2*Math.sqrt(m*m*m)),v=Math.acos(L)/3,W=Math.sqrt(m),w=Math.cos(v),V=(-l-2*W*w)/(3*s),b=(-l+W*(w+U*Math.sin(v)))/(3*s),X=(-l+W*(w-U*Math.sin(v)))/(3*s);V>=0&&1>=V&&(r[u++]=V),b>=0&&1>=b&&(r[u++]=b),X>=0&&1>=X&&(r[u++]=X)}}return u}function r(e,n,a,o,r){var s=6*a-12*n+6*e,l=9*n+3*o-3*e-9*a,h=3*n-3*e,d=0;if(t(l)){if(i(s)){var m=-h/s;m>=0&&1>=m&&(r[d++]=m)}}else{var c=s*s-4*l*h;if(t(c))r[0]=-s/(2*l);else if(c>0){var p=Math.sqrt(c),m=(-s+p)/(2*l),u=(-s-p)/(2*l);m>=0&&1>=m&&(r[d++]=m),u>=0&&1>=u&&(r[d++]=u)}}return d}function s(e,t,i,n,a,o){var r=(t-e)*a+e,s=(i-t)*a+t,l=(n-i)*a+i,h=(s-r)*a+r,d=(l-s)*a+s,m=(d-h)*a+h;o[0]=e,o[1]=r,o[2]=h,o[3]=m,o[4]=m,o[5]=d,o[6]=l,o[7]=n}function l(e,t,i,a,o,r,s,l,h,d,m){var c,p=.005,U=1/0;g[0]=h,g[1]=d;for(var y=0;1>y;y+=.05){f[0]=n(e,i,o,s,y),f[1]=n(t,a,r,l,y);var _=u.distSquare(g,f);U>_&&(c=y,U=_)}U=1/0;for(var x=0;32>x&&!(V>p);x++){var k=c-p,L=c+p;f[0]=n(e,i,o,s,k),f[1]=n(t,a,r,l,k);var _=u.distSquare(f,g);if(k>=0&&U>_)c=k,U=_;else{b[0]=n(e,i,o,s,L),b[1]=n(t,a,r,l,L);var v=u.distSquare(b,g);1>=L&&U>v?(c=L,U=v):p*=.5}}return m&&(m[0]=n(e,i,o,s,c),m[1]=n(t,a,r,l,c)),Math.sqrt(U)}function h(e,t,i,n){var a=1-n;return a*(a*e+2*n*t)+n*n*i}function d(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}function m(e,n,a,o,r){var s=e-2*n+a,l=2*(n-e),h=e-o,d=0;if(t(s)){if(i(l)){var m=-h/l;m>=0&&1>=m&&(r[d++]=m)}}else{var c=l*l-4*s*h;if(t(c)){var m=-l/(2*s);m>=0&&1>=m&&(r[d++]=m)}else if(c>0){var p=Math.sqrt(c),m=(-l+p)/(2*s),u=(-l-p)/(2*s);m>=0&&1>=m&&(r[d++]=m),u>=0&&1>=u&&(r[d++]=u)}}return d}function c(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}function p(e,t,i,n,a,o,r,s,l){var d,m=.005,c=1/0;g[0]=r,g[1]=s;for(var p=0;1>p;p+=.05){f[0]=h(e,i,a,p),f[1]=h(t,n,o,p);var U=u.distSquare(g,f);c>U&&(d=p,c=U)}c=1/0;for(var y=0;32>y&&!(V>m);y++){var _=d-m,x=d+m;f[0]=h(e,i,a,_),f[1]=h(t,n,o,_);var U=u.distSquare(f,g);if(_>=0&&c>U)d=_,c=U;else{b[0]=h(e,i,a,x),b[1]=h(t,n,o,x);var k=u.distSquare(b,g);1>=x&&c>k?(d=x,c=k):m*=.5}}return l&&(l[0]=h(e,i,a,d),l[1]=h(t,n,o,d)),Math.sqrt(c)}var u=e("./vector"),V=1e-4,U=Math.sqrt(3),y=1/3,g=u.create(),f=u.create(),b=u.create();return{cubicAt:n,cubicDerivativeAt:a,cubicRootAt:o,cubicExtrema:r,cubicSubdivide:s,cubicProjectPoint:l,quadraticAt:h,quadraticDerivativeAt:d,quadraticRootAt:m,quadraticExtremum:c,quadraticProjectPoint:p}}),define("zrender/Group",["require","./tool/guid","./tool/util","./mixin/Transformable","./mixin/Eventful"],function(e){var t=e("./tool/guid"),i=e("./tool/util"),n=e("./mixin/Transformable"),a=e("./mixin/Eventful"),o=function(e){e=e||{},this.id=e.id||t();for(var i in e)this[i]=e[i];this.type="group",this.clipShape=null,this._children=[],this._storage=null,this.__dirty=!0,n.call(this),a.call(this)};return o.prototype.ignore=!1,o.prototype.children=function(){return this._children.slice()},o.prototype.childAt=function(e){return this._children[e]},o.prototype.addChild=function(e){e!=this&&e.parent!=this&&(e.parent&&e.parent.removeChild(e),this._children.push(e),e.parent=this,this._storage&&this._storage!==e._storage&&(this._storage.addToMap(e),e instanceof o&&e.addChildrenToStorage(this._storage)))},o.prototype.removeChild=function(e){var t=i.indexOf(this._children,e);this._children.splice(t,1),e.parent=null,this._storage&&(this._storage.delFromMap(e.id),e instanceof o&&e.delChildrenFromStorage(this._storage))},o.prototype.eachChild=function(e,t){for(var i=!!t,n=0;nt)){t=Math.min(t,1);var n="string"==typeof this.easing?i[this.easing]:this.easing,a="function"==typeof n?n(t):t;return this.fire("frame",a),1==t?this.loop?(this.restart(),"restart"):(this._needsRemove=!0,"destroy"):null}},restart:function(){var e=(new Date).getTime(),t=(e-this._startTime)%this._life;this._startTime=(new Date).getTime()-t+this.gap,this._needsRemove=!1},fire:function(e,t){for(var i=0,n=this._targetPool.length;n>i;i++)this["on"+e]&&this["on"+e](this._targetPool[i],t)},constructor:t},t}),define("zrender/animation/easing",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return 0===e?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return 1===e?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)))},ElasticOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*e)*Math.sin(2*(e-t)*Math.PI/n)+1)},ElasticInOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),(e*=2)<1?-.5*i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n):i*Math.pow(2,-10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return 1/2.75>e?7.5625*e*e:2/2.75>e?7.5625*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return.5>t?.5*e.BounceIn(2*t):.5*e.BounceOut(2*t-1)+.5}};return e}),define("echarts/component/base",["require","../config","../util/ecData","../util/ecQuery","../util/number","zrender/tool/util","zrender/tool/env"],function(e){function t(e,t,a,o,r){this.ecTheme=e,this.messageCenter=t,this.zr=a,this.option=o,this.series=o.series,this.myChart=r,this.component=r.component,this._zlevelBase=this.getZlevelBase(),this.shapeList=[],this.effectList=[];var s=this;s._onlegendhoverlink=function(e){if(s.legendHoverLink)for(var t,a=e.target,o=s.shapeList.length-1;o>=0;o--)t=s.type==i.CHART_TYPE_PIE||s.type==i.CHART_TYPE_FUNNEL?n.get(s.shapeList[o],"name"):(n.get(s.shapeList[o],"series")||{}).name,t!=a||s.shapeList[o].invisible||s.zr.addHoverShape(s.shapeList[o])},t&&t.bind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink)}var i=e("../config"),n=e("../util/ecData"),a=e("../util/ecQuery"),o=e("../util/number"),r=e("zrender/tool/util");return t.prototype={canvasSupported:e("zrender/tool/env").canvasSupported,getZlevelBase:function(e){switch(e=e||this.type+""){case i.COMPONENT_TYPE_GRID:case i.COMPONENT_TYPE_AXIS_CATEGORY:case i.COMPONENT_TYPE_AXIS_VALUE:case i.COMPONENT_TYPE_POLAR:return 0;case i.CHART_TYPE_LINE:case i.CHART_TYPE_BAR:case i.CHART_TYPE_SCATTER:case i.CHART_TYPE_PIE:case i.CHART_TYPE_RADAR:case i.CHART_TYPE_MAP:case i.CHART_TYPE_K:case i.CHART_TYPE_CHORD:case i.CHART_TYPE_GUAGE:case i.CHART_TYPE_FUNNEL:case i.CHART_TYPE_EVENTRIVER:return 2;case i.COMPONENT_TYPE_LEGEND:case i.COMPONENT_TYPE_DATARANGE:case i.COMPONENT_TYPE_DATAZOOM:case i.COMPONENT_TYPE_TIMELINE:case i.COMPONENT_TYPE_ROAMCONTROLLER:return 4;case i.CHART_TYPE_ISLAND:return 5;case i.COMPONENT_TYPE_TOOLBOX:case i.COMPONENT_TYPE_TITLE:return 6;case i.COMPONENT_TYPE_TOOLTIP:return 8;default:return 0}},reformOption:function(e){return r.merge(e||{},r.clone(this.ecTheme[this.type]||{}))},reformCssArray:function(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+""){case"4":return e;case"3":return[e[0],e[1],e[2],e[1]];case"2":return[e[0],e[1],e[0],e[1]];case"1":return[e[0],e[0],e[0],e[0]];case"0":return[0,0,0,0]}},getShapeById:function(e){for(var t=0,i=this.shapeList.length;i>t;t++)if(this.shapeList[t].id===e)return this.shapeList[t];return null},getFont:function(e){var t=r.merge(r.clone(e)||{},this.ecTheme.textStyle);return t.fontStyle+" "+t.fontWeight+" "+t.fontSize+"px "+t.fontFamily},getItemStyleColor:function(e,t,i,n){return"function"==typeof e?e.call(this.myChart,{seriesIndex:t,series:this.series[t],dataIndex:i,data:n}):e},subPixelOptimize:function(e,t){return e=t%2===1?Math.floor(e)+.5:Math.round(e)},resize:function(){this.refresh&&this.refresh(),this.clearEffectShape&&this.clearEffectShape(!0);var e=this;setTimeout(function(){e.animationEffect&&e.animationEffect()},200)},clear:function(){this.clearEffectShape&&this.clearEffectShape(),this.zr&&this.zr.delShape(this.shapeList),this.shapeList=[]},dispose:function(){this.onbeforDispose&&this.onbeforDispose(),this.clear(),this.shapeList=null,this.effectList=null,this.messageCenter&&this.messageCenter.unbind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink),this.onafterDispose&&this.onafterDispose()},query:a.query,deepQuery:a.deepQuery,deepMerge:a.deepMerge,parsePercent:o.parsePercent,parseCenter:o.parseCenter,parseRadius:o.parseRadius,numAddCommas:o.addCommas},t}),define("echarts/chart/base",["require","zrender/shape/Image","../util/shape/Icon","../util/shape/MarkLine","../util/shape/Symbol","../config","../util/ecData","../util/ecAnimation","../util/ecEffect","../util/accMath","zrender/tool/util","zrender/tool/area"],function(e){function t(){var e=this;this.selectedMap={},this.lastShapeList=[],this.shapeHandler={onclick:function(){e.isClick=!0},ondragover:function(t){var i=t.target;i.highlightStyle=i.highlightStyle||{};var n=i.highlightStyle,a=n.brushTyep,o=n.strokeColor,r=n.lineWidth;n.brushType="stroke",n.strokeColor=e.ecTheme.calculableColor,n.lineWidth="icon"===i.type?30:10,e.zr.addHoverShape(i),setTimeout(function(){i.highlightStyle&&(i.highlightStyle.brushType=a,i.highlightStyle.strokeColor=o,i.highlightStyle.lineWidth=r)},20)},ondrop:function(t){null!=s.get(t.dragged,"data")&&(e.isDrop=!0)},ondragend:function(){e.isDragend=!0}}}var i=e("zrender/shape/Image"),n=e("../util/shape/Icon"),a=e("../util/shape/MarkLine"),o=e("../util/shape/Symbol"),r=e("../config"),s=e("../util/ecData"),l=e("../util/ecAnimation"),h=e("../util/ecEffect"),d=e("../util/accMath"),m=e("zrender/tool/util"),c=e("zrender/tool/area");return t.prototype={setCalculable:function(e){return e.dragEnableTime=this.ecTheme.DRAG_ENABLE_TIME,e.ondragover=this.shapeHandler.ondragover,e.ondragend=this.shapeHandler.ondragend,e.ondrop=this.shapeHandler.ondrop,e +},ondrop:function(e,t){if(this.isDrop&&e.target&&!t.dragIn){var i,n=e.target,a=e.dragged,o=s.get(n,"seriesIndex"),l=s.get(n,"dataIndex"),h=this.series,m=this.component.legend;if(-1===l){if(s.get(a,"seriesIndex")==o)return t.dragOut=t.dragIn=t.needRefresh=!0,void(this.isDrop=!1);i={value:s.get(a,"value"),name:s.get(a,"name")},this.type===r.CHART_TYPE_PIE&&i.value<0&&(i.value=0);for(var c=!1,p=h[o].data,u=0,V=p.length;V>u;u++)p[u].name===i.name&&"-"===p[u].value&&(h[o].data[u].value=i.value,c=!0);!c&&h[o].data.push(i),m&&m.add(i.name,a.style.color||a.style.strokeColor)}else i=this.option.series[o].data[l]||"-",null!=i.value?(this.option.series[o].data[l].value="-"!=i.value?d.accAdd(this.option.series[o].data[l].value,s.get(a,"value")):s.get(a,"value"),(this.type===r.CHART_TYPE_FUNNEL||this.type===r.CHART_TYPE_PIE)&&(m&&1===m.getRelatedAmount(i.name)&&this.component.legend.del(i.name),i.name+=this.option.nameConnector+s.get(a,"name"),m&&m.add(i.name,a.style.color||a.style.strokeColor))):this.option.series[o].data[l]="-"!=i?d.accAdd(this.option.series[o].data[l],s.get(a,"value")):s.get(a,"value");t.dragIn=t.dragIn||!0,this.isDrop=!1;var U=this;setTimeout(function(){U.zr.trigger("mousemove",e.event)},300)}},ondragend:function(e,t){if(this.isDragend&&e.target&&!t.dragOut){var i=e.target,n=s.get(i,"seriesIndex"),a=s.get(i,"dataIndex"),o=this.series;if(null!=o[n].data[a].value){o[n].data[a].value="-";var r=o[n].data[a].name;this.component.legend&&0===this.component.legend.getRelatedAmount(r)&&this.component.legend.del(r)}else o[n].data[a]="-";t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},onlegendSelected:function(e,t){var i=e.selected;for(var n in this.selectedMap)this.selectedMap[n]!=i[n]&&(t.needRefresh=!0),this.selectedMap[n]=i[n]},_bulidPosition:function(){this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this._sIndex2ColorMap={},this.selectedMap={},this.xMarkMap={};for(var e,t,i,n,a=this.series,o={top:[],bottom:[],left:[],right:[],other:[]},s=0,l=a.length;l>s;s++)a[s].type===this.type&&(a[s]=this.reformOption(a[s]),this.legendHoverLink=a[s].legendHoverLink||this.legendHoverLink,e=a[s].xAxisIndex,t=a[s].yAxisIndex,i=this.component.xAxis.getAxis(e),n=this.component.yAxis.getAxis(t),i.type===r.COMPONENT_TYPE_AXIS_CATEGORY?o[i.getPosition()].push(s):n.type===r.COMPONENT_TYPE_AXIS_CATEGORY?o[n.getPosition()].push(s):o.other.push(s));for(var h in o)o[h].length>0&&this._buildSinglePosition(h,o[h]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){switch(e){case"bottom":case"top":this._buildHorizontal(t,a,n,this.xMarkMap);break;case"left":case"right":this._buildVertical(t,a,n,this.xMarkMap);break;case"other":this._buildOther(t,a,n,this.xMarkMap)}for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n,a,o=this.series,s=0,l={},h="__kener__stack__",d=this.component.legend,m=[],c=0,p=0,u=e.length;u>p;p++)t=o[e[p]],n=t.name,this._sIndex2ShapeMap[e[p]]=this._sIndex2ShapeMap[e[p]]||this.query(t,"symbol")||this._symbol[p%this._symbol.length],d?(this.selectedMap[n]=d.isSelected(n),this._sIndex2ColorMap[e[p]]=d.getColor(n),a=d.getItemShape(n),a&&(this.type==r.CHART_TYPE_LINE?(a.style.iconType="legendLineIcon",a.style.symbol=this._sIndex2ShapeMap[e[p]]):t.itemStyle.normal.barBorderWidth>0&&(a.style.x+=1,a.style.y+=1,a.style.width-=2,a.style.height-=2,a.style.strokeColor=a.highlightStyle.strokeColor=t.itemStyle.normal.barBorderColor,a.highlightStyle.lineWidth=3,a.style.brushType="both"),d.setItemShape(n,a))):(this.selectedMap[n]=!0,this._sIndex2ColorMap[e[p]]=this.zr.getColor(e[p])),this.selectedMap[n]&&(i=t.stack||h+e[p],null==l[i]?(l[i]=s,m[s]=[e[p]],s++):m[l[i]].push(e[p])),c=Math.max(c,t.data.length);return{locationMap:m,maxDataLength:c}},_calculMarkMapXY:function(e,t,i){for(var n=this.series,a=0,o=t.length;o>a;a++)for(var r=0,s=t[a].length;s>r;r++){var l=t[a][r],h="xy"==i?0:"";if("-1"!=i.indexOf("x")){e[l]["counter"+h]>0&&(e[l]["average"+h]=(e[l]["sum"+h]/e[l]["counter"+h]).toFixed(2)-0);var d=this.component.xAxis.getAxis(n[l].xAxisIndex||0).getCoord(e[l]["average"+h]);e[l]["averageLine"+h]=[[d,this.component.grid.getYend()],[d,this.component.grid.getY()]],e[l]["minLine"+h]=[[e[l]["minX"+h],this.component.grid.getYend()],[e[l]["minX"+h],this.component.grid.getY()]],e[l]["maxLine"+h]=[[e[l]["maxX"+h],this.component.grid.getYend()],[e[l]["maxX"+h],this.component.grid.getY()]],e[l].isHorizontal=!1}if(h="xy"==i?1:"","-1"!=i.indexOf("y")){e[l]["counter"+h]>0&&(e[l]["average"+h]=(e[l]["sum"+h]/e[l]["counter"+h]).toFixed(2)-0);var m=this.component.yAxis.getAxis(n[l].yAxisIndex||0).getCoord(e[l]["average"+h]);e[l]["averageLine"+h]=[[this.component.grid.getX(),m],[this.component.grid.getXend(),m]],e[l]["minLine"+h]=[[this.component.grid.getX(),e[l]["minY"+h]],[this.component.grid.getXend(),e[l]["minY"+h]]],e[l]["maxLine"+h]=[[this.component.grid.getX(),e[l]["maxY"+h]],[this.component.grid.getXend(),e[l]["maxY"+h]]],e[l].isHorizontal=!0}}},addLabel:function(e,t,i,n,a){var o=[i,t],r=this.deepMerge(o,"itemStyle.normal.label"),s=this.deepMerge(o,"itemStyle.emphasis.label"),l=r.textStyle||{},h=s.textStyle||{};return r.show&&(e.style.text=this._getLabelText(t,i,n,"normal"),e.style.textPosition=null==r.position?"horizontal"===a?"right":"top":r.position,e.style.textColor=l.color,e.style.textFont=this.getFont(l)),s.show&&(e.highlightStyle.text=this._getLabelText(t,i,n,"emphasis"),e.highlightStyle.textPosition=r.show?e.style.textPosition:null==s.position?"horizontal"===a?"right":"top":s.position,e.highlightStyle.textColor=h.color,e.highlightStyle.textFont=this.getFont(h)),e},_getLabelText:function(e,t,i,n){var a=this.deepQuery([t,e],"itemStyle."+n+".label.formatter");a||"emphasis"!==n||(a=this.deepQuery([t,e],"itemStyle.normal.label.formatter"));var o=null!=t?null!=t.value?t.value:t:"-";return a?"function"==typeof a?a.call(this.myChart,e.name,i,o):"string"==typeof a?(a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),a=a.replace("{a0}",e.name).replace("{b0}",i).replace("{c0}",this.numAddCommas(o))):void 0:this.numAddCommas(o)},buildMark:function(e){var t=this.series[e];this.selectedMap[t.name]&&(t.markPoint&&this._buildMarkPoint(e),t.markLine&&this._buildMarkLine(e))},_buildMarkPoint:function(e){for(var t,i,n=(this.markAttachStyle||{})[e],a=this.series[e],o=this.getZlevelBase(),s=m.clone(a.markPoint),l=0,h=s.data.length;h>l;l++)t=s.data[l],i=this.getMarkCoord(e,t),s.data[l].x=null!=t.x?t.x:i[0],s.data[l].y=null!=t.y?t.y:i[1],!t.type||"max"!==t.type&&"min"!==t.type||(s.data[l].value=i[3],s.data[l].name=t.name||t.type,s.data[l].symbolSize=s.data[l].symbolSize||c.getTextWidth(i[3],this.getFont())/2+5);for(var d=this._markPoint(e,s),l=0,h=d.length;h>l;l++){d[l].zlevel=o+1;for(var p in n)d[l][p]=m.clone(n[p]);this.shapeList.push(d[l])}if(this.type===r.CHART_TYPE_FORCE||this.type===r.CHART_TYPE_CHORD)for(var l=0,h=d.length;h>l;l++)this.zr.addShape(d[l])},_buildMarkLine:function(e){for(var t,i,n=(this.markAttachStyle||{})[e],a=this.series[e],o=this.getZlevelBase(),s=m.clone(a.markLine),l=0,h=s.data.length;h>l;l++)t=s.data[l],!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type?i=[this.getMarkCoord(e,t[0]),this.getMarkCoord(e,t[1])]:(i=this.getMarkCoord(e,t),s.data[l]=[m.clone(t),{}],s.data[l][0].name=t.name||t.type,s.data[l][0].value=i[3],i=i[2],t=[{},{}]),null!=i&&null!=i[0]&&null!=i[1]&&(s.data[l][0].x=null!=t[0].x?t[0].x:i[0][0],s.data[l][0].y=null!=t[0].y?t[0].y:i[0][1],s.data[l][1].x=null!=t[1].x?t[1].x:i[1][0],s.data[l][1].y=null!=t[1].y?t[1].y:i[1][1]);for(var d=this._markLine(e,s),l=0,h=d.length;h>l;l++){d[l].zlevel=o+1;for(var c in n)d[l][c]=m.clone(n[c]);this.shapeList.push(d[l])}if(this.type===r.CHART_TYPE_FORCE||this.type===r.CHART_TYPE_CHORD)for(var l=0,h=d.length;h>l;l++)this.zr.addShape(d[l])},_markPoint:function(e,t){var i=this.series[e],n=this.component;m.merge(t,this.ecTheme.markPoint),t.name=i.name;var a,o,l,h,d,c,p,u=[],V=t.data,U=n.dataRange,y=n.legend,g=this.zr.getWidth(),f=this.zr.getHeight();if(t.large)a=this.getLargeMarkPoingShape(e,t),a._mark="largePoint",a&&u.push(a);else for(var b=0,_=V.length;_>b;b++)null!=V[b].x&&null!=V[b].y&&(l=null!=V[b]&&null!=V[b].value?V[b].value:"",y&&(o=y.getColor(i.name)),U&&(o=isNaN(l)?o:U.getColor(l),h=[V[b],t],d=this.deepQuery(h,"itemStyle.normal.color")||o,c=this.deepQuery(h,"itemStyle.emphasis.color")||d,null==d&&null==c)||(o=null==o?this.zr.getColor(e):o,V[b].tooltip=V[b].tooltip||t.tooltip||{trigger:"item"},V[b].name=null!=V[b].name?V[b].name:"",V[b].value=l,a=this.getSymbolShape(t,e,V[b],b,V[b].name,this.parsePercent(V[b].x,g),this.parsePercent(V[b].y,f),"pin",o,"rgba(0,0,0,0)","horizontal"),a._mark="point",p=this.deepMerge([V[b],t],"effect"),p.show&&(a.effect=p),i.type===r.CHART_TYPE_MAP&&(a._geo=this.getMarkGeo(V[b])),s.pack(a,i,e,V[b],b,V[b].name,l),u.push(a)));return u},_markLine:function(e,t){var i=this.series[e],n=this.component;m.merge(t,this.ecTheme.markLine),t.symbol=t.symbol instanceof Array?t.symbol.length>1?t.symbol:[t.symbol[0],t.symbol[0]]:[t.symbol,t.symbol],t.symbolSize=t.symbolSize instanceof Array?t.symbolSize.length>1?t.symbolSize:[t.symbolSize[0],t.symbolSize[0]]:[t.symbolSize,t.symbolSize],t.symbolRotate=t.symbolRotate instanceof Array?t.symbolRotate.length>1?t.symbolRotate:[t.symbolRotate[0],t.symbolRotate[0]]:[t.symbolRotate,t.symbolRotate],t.name=i.name;for(var a,o,l,h,d,c,p,u,V=[],U=t.data,y=n.dataRange,g=n.legend,f=this.zr.getWidth(),b=this.zr.getHeight(),_=0,x=U.length;x>_;_++)null!=U[_][0].x&&null!=U[_][0].y&&null!=U[_][1].x&&null!=U[_][1].y&&(o=g?g.getColor(i.name):this.zr.getColor(e),u=this.deepMerge(U[_]),l=null!=u&&null!=u.value?u.value:"",y&&(o=isNaN(l)?o:y.getColor(l),h=[u,t],d=this.deepQuery(h,"itemStyle.normal.color")||o,c=this.deepQuery(h,"itemStyle.emphasis.color")||d,null==d&&null==c)||(U[_][0].tooltip=u.tooltip||{trigger:"item"},U[_][0].name=null!=U[_][0].name?U[_][0].name:"",U[_][1].name=null!=U[_][1].name?U[_][1].name:"",U[_][0].value=null!=U[_][0].value?U[_][0].value:"",a=this.getLineMarkShape(t,e,U[_],_,this.parsePercent(U[_][0].x,f),this.parsePercent(U[_][0].y,b),this.parsePercent(U[_][1].x,f),this.parsePercent(U[_][1].y,b),o),a._mark="line",p=this.deepMerge([u,t],"effect"),p.show&&(a.effect=p),i.type===r.CHART_TYPE_MAP&&(a._geo=[this.getMarkGeo(U[_][0]),this.getMarkGeo(U[_][1])]),s.pack(a,i,e,U[_][0],_,U[_][0].name+(""!==U[_][1].name?" > "+U[_][1].name:""),l),V.push(a)));return V},getMarkCoord:function(){return[0,0]},getSymbolShape:function(e,t,a,o,r,l,h,d,m,c,p){var u=[a,e],V=null!=a?null!=a.value?a.value:a:"-";d=this.deepQuery(u,"symbol")||d;var U=this.deepQuery(u,"symbolSize");U="function"==typeof U?U(V):U;var y=this.deepQuery(u,"symbolRotate"),g=this.deepMerge(u,"itemStyle.normal"),f=this.deepMerge(u,"itemStyle.emphasis"),b=null!=g.borderWidth?g.borderWidth:g.lineStyle&&g.lineStyle.width;null==b&&(b=d.match("empty")?2:0);var _=null!=f.borderWidth?f.borderWidth:f.lineStyle&&f.lineStyle.width;null==_&&(_=b+2);var x=new n({style:{iconType:d.replace("empty","").toLowerCase(),x:l-U,y:h-U,width:2*U,height:2*U,brushType:"both",color:d.match("empty")?c:this.getItemStyleColor(g.color,t,o,a)||m,strokeColor:g.borderColor||this.getItemStyleColor(g.color,t,o,a)||m,lineWidth:b},highlightStyle:{color:d.match("empty")?c:this.getItemStyleColor(f.color,t,o,a),strokeColor:f.borderColor||g.borderColor||this.getItemStyleColor(g.color,t,o,a)||m,lineWidth:_},clickable:this.deepQuery(u,"clickable")});return d.match("image")&&(x.style.image=d.replace(new RegExp("^image:\\/\\/"),""),x=new i({style:x.style,highlightStyle:x.highlightStyle,clickable:this.deepQuery(u,"clickable")})),null!=y&&(x.rotation=[y*Math.PI/180,l,h]),d.match("star")&&(x.style.iconType="star",x.style.n=d.replace("empty","").replace("star","")-0||5),"none"===d&&(x.invisible=!0,x.hoverable=!1),x=this.addLabel(x,e,a,r,p),d.match("empty")&&(null==x.style.textColor&&(x.style.textColor=x.style.strokeColor),null==x.highlightStyle.textColor&&(x.highlightStyle.textColor=x.highlightStyle.strokeColor)),s.pack(x,e,t,a,o,r),x._x=l,x._y=h,x._dataIndex=o,x._seriesIndex=t,x},getLineMarkShape:function(e,t,i,n,o,r,s,l,h){var d=null!=i[0]?null!=i[0].value?i[0].value:i[0]:"-",m=null!=i[1]?null!=i[1].value?i[1].value:i[1]:"-",c=[this.query(i[0],"symbol")||e.symbol[0],this.query(i[1],"symbol")||e.symbol[1]],p=[this.query(i[0],"symbolSize")||e.symbolSize[0],this.query(i[1],"symbolSize")||e.symbolSize[1]];p[0]="function"==typeof p[0]?p[0](d):p[0],p[1]="function"==typeof p[1]?p[1](m):p[1];var u=[this.query(i[0],"symbolRotate")||e.symbolRotate[0],this.query(i[1],"symbolRotate")||e.symbolRotate[1]],V=[i[0],e],U=this.deepMerge(V,"itemStyle.normal");U.color=this.getItemStyleColor(U.color,t,n,i);var y=this.deepMerge(V,"itemStyle.emphasis");y.color=this.getItemStyleColor(y.color,t,n,i);var g=U.lineStyle,f=y.lineStyle,b=g.width;null==b&&(b=U.borderWidth);var _=f.width;null==_&&(_=null!=y.borderWidth?y.borderWidth:b+2);var x=new a({style:{smooth:e.smooth?"spline":!1,symbol:c,symbolSize:p,symbolRotate:u,xStart:o,yStart:r,xEnd:s,yEnd:l,brushType:"both",lineType:g.type,shadowColor:g.shadowColor||g.color||U.borderColor||U.color||h,shadowBlur:g.shadowBlur,shadowOffsetX:g.shadowOffsetX,shadowOffsetY:g.shadowOffsetY,color:U.color||h,strokeColor:g.color||U.borderColor||U.color||h,lineWidth:b,symbolBorderColor:U.borderColor||U.color||h,symbolBorder:U.borderWidth},highlightStyle:{shadowColor:f.shadowColor,shadowBlur:f.shadowBlur,shadowOffsetX:f.shadowOffsetX,shadowOffsetY:f.shadowOffsetY,color:y.color||U.color||h,strokeColor:f.color||g.color||y.borderColor||U.borderColor||y.color||U.color||h,lineWidth:_,symbolBorderColor:y.borderColor||U.borderColor||y.color||U.color||h,symbolBorder:null==y.borderWidth?U.borderWidth+2:y.borderWidth},clickable:this.deepQuery(V,"clickable")});return x=this.addLabel(x,e,i[0],i[0].name+" : "+i[1].name),x._x=s,x._y=l,x},getLargeMarkPoingShape:function(e,t){var i,n,a,r,s,l,h=this.series[e],d=this.component,m=t.data,c=d.dataRange,p=d.legend,u=[m[0],t];if(p&&(n=p.getColor(h.name)),!c||(a=null!=m[0]?null!=m[0].value?m[0].value:m[0]:"-",n=isNaN(a)?n:c.getColor(a),r=this.deepQuery(u,"itemStyle.normal.color")||n,s=this.deepQuery(u,"itemStyle.emphasis.color")||r,null!=r||null!=s)){n=this.deepMerge(u,"itemStyle.normal").color||n;var V=this.deepQuery(u,"symbol")||"circle";V=V.replace("empty","").replace(/\d/g,""),l=this.deepMerge([m[0],t],"effect");var U=window.devicePixelRatio||1;return i=new o({style:{pointList:m,color:n,strokeColor:n,shadowColor:l.shadowColor||n,shadowBlur:(null!=l.shadowBlur?l.shadowBlur:8)*U,size:this.deepQuery(u,"symbolSize"),iconType:V,brushType:"fill",lineWidth:1},draggable:!1,hoverable:!1}),l.show&&(i.effect=l),i}},backupShapeList:function(){this.shapeList&&this.shapeList.length>0?(this.lastShapeList=this.shapeList,this.shapeList=[]):this.lastShapeList=[]},addShapeList:function(){var e,t,i=this.option.animationThreshold/(this.canvasSupported?2:4),n=this.lastShapeList,a=this.shapeList,o=n.length>0?500:this.query(this.option,"animationDuration"),s=this.query(this.option,"animationEasing"),l={},h={};if(this.option.animation&&!this.option.renderAsImage&&a.lengthd;d++)t=this._getAnimationKey(n[d]),t.match("undefined")?this.zr.delShape(n[d].id):(t+=n[d].type,l[t]=n[d]);for(var d=0,m=a.length;m>d;d++)t=this._getAnimationKey(a[d]),t.match("undefined")?this.zr.addShape(a[d]):(t+=a[d].type,h[t]=a[d]);for(t in l)h[t]||this.zr.delShape(l[t].id);for(t in h)l[t]?(this.zr.delShape(l[t].id),this._animateMod(l[t],h[t],o,s)):(e=this.type!=r.CHART_TYPE_LINE&&this.type!=r.CHART_TYPE_RADAR||0===t.indexOf("icon")?0:o/2,this._animateMod(!1,h[t],o,s,e));this.zr.refresh(),this.animationEffect()}else{this.motionlessOnce=!1,this.zr.delShape(n);for(var d=0,m=a.length;m>d;d++)this.zr.addShape(a[d])}},_getAnimationKey:function(e){return this.type!=r.CHART_TYPE_MAP?s.get(e,"seriesIndex")+"_"+s.get(e,"dataIndex")+(e._mark?e._mark:"")+(this.type===r.CHART_TYPE_RADAR?s.get(e,"special"):""):s.get(e,"seriesIndex")+"_"+s.get(e,"dataIndex")+(e._mark?e._mark:"undefined")},_animateMod:function(e,t,i,n,a){switch(t.type){case"broken-line":case"half-smooth-polygon":l.pointList(this.zr,e,t,i,n);break;case"rectangle":l.rectangle(this.zr,e,t,i,n);break;case"icon":l.icon(this.zr,e,t,i,n,a);break;case"candle":i>500?l.candle(this.zr,e,t,i,n):this.zr.addShape(t);break;case"ring":case"sector":case"circle":i>500?l.ring(this.zr,e,t,i+(s.get(t,"dataIndex")||0)%20*100,n):"sector"===t.type?l.sector(this.zr,e,t,i,n):this.zr.addShape(t);break;case"text":l.text(this.zr,e,t,i,n);break;case"polygon":i>500?l.polygon(this.zr,e,t,i,n):l.pointList(this.zr,e,t,i,n);break;case"ribbon":l.ribbon(this.zr,e,t,i,n);break;case"gauge-pointer":l.gaugePointer(this.zr,e,t,i,n);break;case"mark-line":l.markline(this.zr,e,t,i,n);break;case"bezier-curve":case"line":l.line(this.zr,e,t,i,n);break;default:this.zr.addShape(t)}},animationMark:function(e,t,i){for(var n=i||this.shapeList,a=0,o=n.length;o>a;a++)n[a]._mark&&this._animateMod(!1,n[a],e,t);this.animationEffect(i)},animationEffect:function(e){!e&&this.clearEffectShape();var t=e||this.shapeList;if(null!=t){var i=r.EFFECT_ZLEVEL;this.canvasSupported&&this.zr.modLayer(i,{motionBlur:!0,lastFrameAlpha:.95});for(var n,a=0,o=t.length;o>a;a++)n=t[a],n._mark&&n.effect&&n.effect.show&&h[n._mark]&&(h[n._mark](this.zr,this.effectList,n,i),this.effectList[this.effectList.length-1]._mark=n._mark)}},clearEffectShape:function(e){this.zr&&this.effectList&&this.effectList.length>0&&(e&&this.zr.modLayer(r.EFFECT_ZLEVEL,{motionBlur:!1}),this.zr.delShape(this.effectList)),this.effectList=[]},addMark:function(e,t,i){var n=this.series[e];if(this.selectedMap[n.name]){var a=500,o=this.query(this.option,"animationEasing"),r=n[i].data,s=this.shapeList.length;if(n[i].data=t.data,this["_build"+i.replace("m","M")](e),this.option.animation&&!this.option.renderAsImage)this.animationMark(a,o,this.shapeList.slice(s));else{for(var l=s,h=this.shapeList.length;h>l;l++)this.zr.addShape(this.shapeList[l]);this.zr.refresh()}n[i].data=r}},delMark:function(e,t,i){i=i.replace("mark","").replace("large","").toLowerCase();var n=this.series[e];if(this.selectedMap[n.name]){for(var a=!1,o=[this.shapeList,this.effectList],r=2;r--;)for(var l=0,h=o[r].length;h>l;l++)if(o[r][l]._mark==i&&s.get(o[r][l],"seriesIndex")==e&&s.get(o[r][l],"name")==t){this.zr.delShape(o[r][l].id),o[r].splice(l,1),a=!0;break}a&&this.zr.refresh()}}},t}),define("zrender/shape/Circle",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"circle",buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),define("echarts/util/accMath",[],function(){function e(e,t){var i=e.toString(),n=t.toString(),a=0;try{a=n.split(".")[1].length}catch(o){}try{a-=i.split(".")[1].length}catch(o){}return(i.replace(".","")-0)/(n.replace(".","")-0)*Math.pow(10,a)}function t(e,t){var i=e.toString(),n=t.toString(),a=0;try{a+=i.split(".")[1].length}catch(o){}try{a+=n.split(".")[1].length}catch(o){}return(i.replace(".","")-0)*(n.replace(".","")-0)/Math.pow(10,a)}function i(e,t){var i=0,n=0;try{i=e.toString().split(".")[1].length}catch(a){}try{n=t.toString().split(".")[1].length}catch(a){}var o=Math.pow(10,Math.max(i,n));return(Math.round(e*o)+Math.round(t*o))/o}function n(e,t){return i(e,-t)}return{accDiv:e,accMul:t,accAdd:i,accSub:n}}),define("echarts/util/ecQuery",["require","zrender/tool/util"],function(e){function t(e,t){if("undefined"!=typeof e){if(!t)return e;t=t.split(".");for(var i=t.length,n=0;i>n;){if(e=e[t[n]],"undefined"==typeof e)return;n++}return e}}function i(e,i){for(var n,a=0,o=e.length;o>a;a++)if(n=t(e[a],i),"undefined"!=typeof n)return n}function n(e,i){for(var n,o=e.length;o--;){var r=t(e[o],i);"undefined"!=typeof r&&("undefined"==typeof n?n=a.clone(r):a.merge(n,r,!0))}return n}var a=e("zrender/tool/util");return{query:t,deepQuery:i,deepMerge:n}}),define("echarts/util/number",[],function(){function e(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}function t(t,i){return"string"==typeof t?e(t).match(/%$/)?parseFloat(t)/100*i:parseFloat(t):t}function i(e,i){return[t(i[0],e.getWidth()),t(i[1],e.getHeight())]}function n(e,i){i instanceof Array||(i=[0,i]);var n=Math.min(e.getWidth(),e.getHeight())/2;return[t(i[0],n),t(i[1],n)]}function a(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:""))}return{parsePercent:t,parseCenter:i,parseRadius:n,addCommas:a}}),define("echarts/util/shape/Icon",["require","zrender/tool/util","zrender/shape/Star","zrender/shape/Heart","zrender/shape/Droplet","zrender/shape/Image","zrender/shape/Base"],function(e){function t(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o),e.moveTo(i+13*a,n+10*o),e.lineTo(i+13*a,n+t.height)}function i(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o)}function n(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+4*a,n+15*o),e.lineTo(i+9*a,n+13*o),e.lineTo(i+14*a,n+8*o),e.lineTo(i+11*a,n+5*o),e.lineTo(i+6*a,n+10*o),e.lineTo(i+4*a,n+15*o),e.moveTo(i+5*a,n),e.lineTo(i+11*a,n),e.moveTo(i+5*a,n+o),e.lineTo(i+11*a,n+o),e.moveTo(i,n+2*o),e.lineTo(i+t.width,n+2*o),e.moveTo(i,n+5*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+13*a,n+t.height),e.lineTo(i+t.width,n+5*o)}function a(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+3*o),e.lineTo(i+6*a,n+3*o),e.moveTo(i+3*a,n),e.lineTo(i+3*a,n+6*o),e.moveTo(i+3*a,n+8*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n+3*o),e.lineTo(i+8*a,n+3*o)}function o(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+6*a,n),e.lineTo(i+2*a,n+3*o),e.lineTo(i+6*a,n+6*o),e.moveTo(i+2*a,n+3*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+14*a,n+11*o),e.moveTo(i+2*a,n+5*o),e.lineTo(i+2*a,n+13*o),e.lineTo(i+14*a,n+13*o),e.moveTo(i+10*a,n+10*o),e.lineTo(i+14*a,n+13*o),e.lineTo(i+10*a,n+t.height)}function r(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16,r=t.width/2;e.lineWidth=1.5,e.arc(i+r,n+r,r-a,0,2*Math.PI/3),e.moveTo(i+3*a,n+t.height),e.lineTo(i+0*a,n+12*o),e.lineTo(i+5*a,n+11*o),e.moveTo(i,n+8*o),e.arc(i+r,n+r,r-a,Math.PI,5*Math.PI/3),e.moveTo(i+13*a,n),e.lineTo(i+t.width,n+4*o),e.lineTo(i+11*a,n+5*o)}function s(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+2*a,n+14*o),e.lineTo(i+7*a,n+6*o),e.lineTo(i+11*a,n+11*o),e.lineTo(i+15*a,n+2*o)}function l(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+3*a,n+14*o),e.lineTo(i+3*a,n+6*o),e.lineTo(i+4*a,n+6*o),e.lineTo(i+4*a,n+14*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+7*a,n+2*o),e.lineTo(i+8*a,n+2*o),e.lineTo(i+8*a,n+14*o),e.moveTo(i+11*a,n+14*o),e.lineTo(i+11*a,n+9*o),e.lineTo(i+12*a,n+9*o),e.lineTo(i+12*a,n+14*o)}function h(e,t){var i=t.x,n=t.y,a=t.width-2,o=t.height-2,r=Math.min(a,o)/2;n+=2,e.moveTo(i+r+3,n+r-3),e.arc(i+r+3,n+r-3,r-1,0,-Math.PI/2,!0),e.lineTo(i+r+3,n+r-3),e.moveTo(i+r,n),e.lineTo(i+r,n+r),e.arc(i+r,n+r,r,-Math.PI/2,2*Math.PI,!0),e.lineTo(i+r,n+r),e.lineWidth=1.5}function d(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;n-=o,e.moveTo(i+1*a,n+2*o),e.lineTo(i+15*a,n+2*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+2*a,n+3*o),e.moveTo(i+3*a,n+6*o),e.lineTo(i+13*a,n+6*o),e.lineTo(i+12*a,n+7*o),e.lineTo(i+4*a,n+7*o),e.moveTo(i+5*a,n+10*o),e.lineTo(i+11*a,n+10*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+9*a,n+14*o),e.lineTo(i+8*a,n+15*o),e.lineTo(i+7*a,n+15*o)}function m(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=a/16,s=o/16,l=2*Math.min(r,s);e.moveTo(i+r+l,n+s+l),e.arc(i+r,n+s,l,Math.PI/4,3*Math.PI),e.lineTo(i+7*r-l,n+6*s-l),e.arc(i+7*r,n+6*s,l,Math.PI/4*5,4*Math.PI),e.arc(i+7*r,n+6*s,l/2,Math.PI/4*5,4*Math.PI),e.moveTo(i+7*r-l/2,n+6*s+l),e.lineTo(i+r+l,n+14*s-l),e.arc(i+r,n+14*s,l,-Math.PI/4,2*Math.PI),e.moveTo(i+7*r+l/2,n+6*s),e.lineTo(i+14*r-l,n+10*s-l/2),e.moveTo(i+16*r,n+10*s),e.arc(i+14*r,n+10*s,l,0,3*Math.PI),e.lineWidth=1.5}function c(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.min(a,o)/2;e.moveTo(i+a,n+o/2),e.arc(i+r,n+r,r,0,2*Math.PI),e.arc(i+r,n,r,Math.PI/4,Math.PI/5*4),e.arc(i,n+r,r,-Math.PI/3,Math.PI/3),e.arc(i+a,n+o,r,Math.PI,Math.PI/2*3),e.lineWidth=1.5}function p(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(o/3),s=3;s--;)e.rect(i,n+r*s+2,a,2)}function u(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(a/3),s=3;s--;)e.rect(i+r*s,n,2,o)}function V(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+15*a,n+t.height),e.lineTo(i+15*a,n),e.lineTo(i+a,n),e.moveTo(i+3*a,n+3*a),e.lineTo(i+13*a,n+3*a),e.moveTo(i+3*a,n+6*a),e.lineTo(i+13*a,n+6*a),e.moveTo(i+3*a,n+9*a),e.lineTo(i+13*a,n+9*a),e.moveTo(i+3*a,n+12*a),e.lineTo(i+9*a,n+12*a)}function U(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n),e.lineTo(i,n),e.moveTo(i+4*a,n),e.lineTo(i+4*a,n+8*o),e.lineTo(i+12*a,n+8*o),e.lineTo(i+12*a,n),e.moveTo(i+6*a,n+11*o),e.lineTo(i+6*a,n+13*o),e.lineTo(i+10*a,n+13*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o)}function y(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o/2),e.lineTo(i+a,n+o/2),e.moveTo(i+a/2,n),e.lineTo(i+a/2,n+o)}function g(e,t){var i=t.width/2,n=t.height/2,a=Math.min(i,n);e.moveTo(t.x+i+a,t.y+n),e.arc(t.x+i,t.y+n,a,0,2*Math.PI),e.closePath()}function f(e,t){e.rect(t.x,t.y,t.width,t.height),e.closePath()}function b(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o+r),e.lineTo(a-r,o+r),e.lineTo(a,o-r),e.closePath()}function _(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o),e.lineTo(a,o+r),e.lineTo(a-r,o),e.lineTo(a,o-r),e.closePath()}function x(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+8*a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+8*a,n+t.height/4*3),e.lineTo(i+15*a,n+t.height),e.lineTo(i+8*a,n),e.closePath()}function k(t,i){var n=e("zrender/shape/Star"),a=i.width/2,o=i.height/2;n.prototype.buildPath(t,{x:i.x+a,y:i.y+o,r:Math.min(a,o),n:i.n||5})}function L(t,i){var n=e("zrender/shape/Heart");n.prototype.buildPath(t,{x:i.x+i.width/2,y:i.y+.2*i.height,a:i.width/2,b:.8*i.height})}function v(t,i){var n=e("zrender/shape/Droplet");n.prototype.buildPath(t,{x:i.x+.5*i.width,y:i.y+.5*i.height,a:.5*i.width,b:.8*i.height})}function W(e,t){var i=t.x,n=t.y-t.height/2*1.5,a=t.width/2,o=t.height/2,r=Math.min(a,o);e.arc(i+a,n+o,r,Math.PI/5*4,Math.PI/5),e.lineTo(i+a,n+o+1.5*r),e.closePath()}function w(t,i,n){var a=e("zrender/shape/Image");this._imageShape=this._imageShape||new a({style:{}});for(var o in i)this._imageShape.style[o]=i[o];this._imageShape.brush(t,!1,n)}function X(e){K.call(this,e)}var I=e("zrender/tool/util"),K=e("zrender/shape/Base");return X.prototype={type:"icon",iconLibrary:{mark:t,markUndo:i,markClear:n,dataZoom:a,dataZoomReset:o,restore:r,lineChart:s,barChart:l,pieChart:h,funnelChart:d,forceChart:m,chordChart:c,stackChart:p,tiledChart:u,dataView:V,saveAsImage:U,cross:y,circle:g,rectangle:f,triangle:b,diamond:_,arrow:x,star:k,heart:L,droplet:v,pin:W,image:w},brush:function(t,i,n){var a=i?this.highlightStyle:this.style;a=a||{};var o=a.iconType||this.style.iconType;if("image"===o){var r=e("zrender/shape/Image");r.prototype.brush.call(this,t,i,n)}else{var a=this.beforeBrush(t,i);switch(t.beginPath(),this.buildPath(t,a,n),a.brushType){case"both":t.fill();case"stroke":a.lineWidth>0&&t.stroke();break;default:t.fill()}this.drawText(t,a,this.style),this.afterBrush(t)}},buildPath:function(e,t,i){this.iconLibrary[t.iconType]?this.iconLibrary[t.iconType].call(this,e,t,i):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y),e.closePath())},getRect:function(e){return e.__rect?e.__rect:(e.__rect={x:Math.round(e.x),y:Math.round(e.y-("pin"==e.iconType?e.height/2*1.5:0)),width:e.width,height:e.height},e.__rect)},isCover:function(e,t){var i=this.getTansform(e,t);e=i[0],t=i[1];var n=this.style.__rect;n||(n=this.style.__rect=this.getRect(this.style));var a=n.height<8||n.width<8?4:0;return e>=n.x-a&&e<=n.x+n.width+a&&t>=n.y-a&&t<=n.y+n.height+a?!0:!1}},I.inherits(X,K),X}),define("echarts/util/shape/MarkLine",["require","zrender/shape/Base","./Icon","zrender/shape/Line","zrender/shape/BrokenLine","zrender/tool/matrix","zrender/tool/area","zrender/shape/util/dashedLineTo","zrender/shape/util/smoothSpline","zrender/tool/util"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/Line"),o=new a({}),r=e("zrender/shape/BrokenLine"),s=new r({}),l=e("zrender/tool/matrix"),h=e("zrender/tool/area"),d=e("zrender/shape/util/dashedLineTo"),m=e("zrender/shape/util/smoothSpline"),c=e("zrender/tool/util");return t.prototype={type:"mark-line",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildLinePath(e,i,this.style.lineWidth||1),e.stroke(),e.restore(),this.brushSymbol(e,i,0),this.brushSymbol(e,i,1),this.drawText(e,i,this.style),e.restore()},buildLinePath:function(e,t,i){var n=t.pointList||this.getPointList(t);t.pointList=n;var a=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length));if(t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType)if("spline"!==t.smooth){var o=i*("dashed"==t.lineType?5:1);e.moveTo(n[0][0],n[0][1]);for(var r=1;a>r;r++)d(e,n[r-1][0],n[r-1][1],n[r][0],n[r][1],o)}else for(var r=1;a>r;r+=2)e.moveTo(n[r-1][0],n[r-1][1]),e.lineTo(n[r][0],n[r][1])}else{e.moveTo(n[0][0],n[0][1]);for(var r=1;a>r;r++)e.lineTo(n[r][0],n[r][1])}},brushSymbol:function(e,t,i){if("none"!=t.symbol[i]){e.save(),e.beginPath(),e.lineWidth=t.symbolBorder,e.strokeStyle=t.symbolBorderColor,t.iconType=t.symbol[i].replace("empty","").toLowerCase(),t.symbol[i].match("empty")&&(e.fillStyle="#fff");var a,o=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length)),r=0===i?t.pointList[0][0]:t.pointList[o-1][0],s=0===i?t.pointList[0][1]:t.pointList[o-1][1],h="undefined"!=typeof t.symbolRotate[i]?t.symbolRotate[i]-0:0;if(0!==h&&(a=l.create(),l.identity(a),(r||s)&&l.translate(a,a,[-r,-s]),l.rotate(a,a,h*Math.PI/180),(r||s)&&l.translate(a,a,[r,s]),e.transform.apply(e,a)),"arrow"==t.iconType&&0===h)this.buildArrawPath(e,t,i);else{var d=t.symbolSize[i];t.x=r-d,t.y=s-d,t.width=2*d,t.height=2*d,n.prototype.buildPath(e,t)}e.closePath(),e.fill(),e.stroke(),e.restore()}},buildArrawPath:function(e,t,i){var n=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length)),a=2*t.symbolSize[i],o=t.pointList[0][0],r=t.pointList[n-1][0],s=t.pointList[0][1],l=t.pointList[n-1][1],h=0;"spline"===t.smooth&&(h=.2);var d=Math.atan(Math.abs((l-s)/(o-r)));0===i?r>o?l>s?d=2*Math.PI-d+h:d+=h:l>s?d+=Math.PI-h:d=Math.PI-d-h:o>r?s>l?d=2*Math.PI-d+h:d+=h:s>l?d+=Math.PI-h:d=Math.PI-d-h;var m=Math.PI/8,c=0===i?o:r,p=0===i?s:l,u=[[c+a*Math.cos(d-m),p-a*Math.sin(d-m)],[c+.6*a*Math.cos(d),p-.6*a*Math.sin(d)],[c+a*Math.cos(d+m),p-a*Math.sin(d+m)]];e.moveTo(c,p); +for(var V=0,U=u.length;U>V;V++)e.lineTo(u[V][0],u[V][1]);e.lineTo(c,p)},getPointList:function(e){var t=[[e.xStart,e.yStart],[e.xEnd,e.yEnd]];if("spline"===e.smooth){var i=t[1][0],n=t[1][1];t[3]=[i,n],t[1]=this.getOffetPoint(t[0],t[3]),t[2]=this.getOffetPoint(t[3],t[0]),t=m(t,!1),t[t.length-1]=[i,n]}return t},getOffetPoint:function(e,t){var i,n=Math.sqrt(Math.round((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])))/3,a=[e[0],e[1]],o=.2;if(e[0]!=t[0]&&e[1]!=t[1]){var r=(t[1]-e[1])/(t[0]-e[0]);i=Math.atan(r)}else i=e[0]==t[0]?(e[1]<=t[1]?1:-1)*Math.PI/2:0;var s,l;return e[0]<=t[0]?(i-=o,s=Math.round(Math.cos(i)*n),l=Math.round(Math.sin(i)*n),a[0]+=s,a[1]+=l):(i+=o,s=Math.round(Math.cos(i)*n),l=Math.round(Math.sin(i)*n),a[0]-=s,a[1]-=l),a},getRect:function(e){if(e.__rect)return e.__rect;var t=e.lineWidth||1;return e.__rect={x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t},e.__rect},isCover:function(e,t){var i=this.getTansform(e,t);e=i[0],t=i[1];var n=this.style.__rect;return n||(n=this.style.__rect=this.getRect(this.style)),e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height?"spline"!==this.style.smooth?h.isInside(o,this.style,e,t):h.isInside(s,this.style,e,t):!1}},c.inherits(t,i),t}),define("echarts/util/shape/Symbol",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=new n({}),o=e("zrender/tool/util");return t.prototype={type:"symbol",buildPath:function(e,t){var i=t.pointList,n=i.length;if(0!==n)for(var a,o,r,s,l,h=1e4,d=Math.ceil(n/h),m=i[0]instanceof Array,c=t.size?t.size:2,p=c,u=c/2,V=2*Math.PI,U=0;d>U;U++){e.beginPath(),a=U*h,o=a+h,o=o>n?n:o;for(var y=a;o>y;y++)if(t.random&&(r=t["randomMap"+y%20]/100,p=c*r*r,u=p/2),m?(s=i[y][0],l=i[y][1]):(s=i[y].x,l=i[y].y),3>p)e.rect(s-u,l-u,p,p);else switch(t.iconType){case"circle":e.moveTo(s,l),e.arc(s,l,u,0,V,!0);break;case"diamond":e.moveTo(s,l-u),e.lineTo(s+u/3,l-u/3),e.lineTo(s+u,l),e.lineTo(s+u/3,l+u/3),e.lineTo(s,l+u),e.lineTo(s-u/3,l+u/3),e.lineTo(s-u,l),e.lineTo(s-u/3,l-u/3),e.lineTo(s,l-u);break;default:e.rect(s-u,l-u,p,p)}if(e.closePath(),d-1>U)switch(t.brushType){case"both":e.fill(),t.lineWidth>0&&e.stroke();break;case"stroke":t.lineWidth>0&&e.stroke();break;default:e.fill()}}},getRect:function(e){return e.__rect||a.getRect(e)},isCover:e("./normalIsCover")},o.inherits(t,i),t}),define("echarts/util/ecAnimation",["require","zrender/tool/util","zrender/shape/Polygon"],function(e){function t(e,t,i,n,a){var o,r=i.style.pointList,s=r.length;if(!t){if(o=[],"vertical"!=i._orient)for(var l=r[0][1],h=0;s>h;h++)o[h]=[r[h][0],l];else for(var d=r[0][0],h=0;s>h;h++)o[h]=[d,r[h][1]];"half-smooth-polygon"==i.type&&(o[s-1]=u.clone(r[s-1]),o[s-2]=u.clone(r[s-2])),t={style:{pointList:o}}}o=t.style.pointList;var m=o.length;i.style.pointList=m==s?o:s>m?o.concat(r.slice(m)):o.slice(0,s),e.addShape(i),e.animate(i.id,"style").when(n,{pointList:r}).start(a)}function i(e,t){for(var i=arguments.length,n=2;i>n;n++){var a=arguments[n];e.style[a]=t.style[a]}}function n(e,t,n,a,o){var r=n.style;t||(t={position:n.position,style:{x:r.x,y:"vertical"==n._orient?r.y+r.height:r.y,width:"vertical"==n._orient?r.width:0,height:"vertical"!=n._orient?r.height:0}});var s=r.x,l=r.y,h=r.width,d=r.height,m=[n.position[0],n.position[1]];i(n,t,"x","y","width","height"),n.position=t.position,e.addShape(n),(m[0]!=t.position[0]||m[1]!=t.position[1])&&e.animate(n.id,"").when(a,{position:m}).start(o),e.animate(n.id,"style").when(a,{x:s,y:l,width:h,height:d}).start(o)}function a(e,t,i,n,a){if(!t){var o=i.style.y;t={style:{y:[o[0],o[0],o[0],o[0]]}}}var r=i.style.y;i.style.y=t.style.y,e.addShape(i),e.animate(i.id,"style").when(n,{y:r}).start(a)}function o(e,t,i,n,a){var o=i.style.x,r=i.style.y,s=i.style.r0,l=i.style.r;"r"!=i._animationAdd?(i.style.r0=0,i.style.r=0,i.rotation=[2*Math.PI,o,r],e.addShape(i),e.animate(i.id,"style").when(n,{r0:s,r:l}).start(a),e.animate(i.id,"").when(Math.round(n/3*2),{rotation:[0,o,r]}).start(a)):(i.style.r0=i.style.r,e.addShape(i),e.animate(i.id,"style").when(n,{r0:s}).start(a))}function r(e,t,n,a,o){t||(t="r"!=n._animationAdd?{style:{startAngle:n.style.startAngle,endAngle:n.style.startAngle}}:{style:{r0:n.style.r}});var r=n.style.startAngle,s=n.style.endAngle;i(n,t,"startAngle","endAngle"),e.addShape(n),e.animate(n.id,"style").when(a,{startAngle:r,endAngle:s}).start(o)}function s(e,t,n,a,o){t||(t={style:{x:"left"==n.style.textAlign?n.style.x+100:n.style.x-100,y:n.style.y}});var r=n.style.x,s=n.style.y;i(n,t,"x","y"),e.addShape(n),e.animate(n.id,"style").when(a,{x:r,y:s}).start(o)}function l(t,i,n,a,o){var r=e("zrender/shape/Polygon").prototype.getRect(n.style),s=r.x+r.width/2,l=r.y+r.height/2;n.scale=[.1,.1,s,l],t.addShape(n),t.animate(n.id,"").when(a,{scale:[1,1,s,l]}).start(o)}function h(e,t,n,a,o){t||(t={style:{source0:0,source1:n.style.source1>0?360:-360,target0:0,target1:n.style.target1>0?360:-360}});var r=n.style.source0,s=n.style.source1,l=n.style.target0,h=n.style.target1;t.style&&i(n,t,"source0","source1","target0","target1"),e.addShape(n),e.animate(n.id,"style").when(a,{source0:r,source1:s,target0:l,target1:h}).start(o)}function d(e,t,i,n,a){t||(t={style:{angle:i.style.startAngle}});var o=i.style.angle;i.style.angle=t.style.angle,e.addShape(i),e.animate(i.id,"style").when(n,{angle:o}).start(a)}function m(e,t,i,a,o,r){if(i.style._x=i.style.x,i.style._y=i.style.y,i.style._width=i.style.width,i.style._height=i.style.height,t)n(e,t,i,a,o);else{var s=i._x||0,l=i._y||0;i.scale=[.01,.01,s,l],e.addShape(i),e.animate(i.id,"").delay(r).when(a,{scale:[1,1,s,l]}).start(o||"QuinticOut")}}function c(e,t,n,a,o){t||(t={style:{xStart:n.style.xStart,yStart:n.style.yStart,xEnd:n.style.xStart,yEnd:n.style.yStart}});var r=n.style.xStart,s=n.style.xEnd,l=n.style.yStart,h=n.style.yEnd;i(n,t,"xStart","xEnd","yStart","yEnd"),e.addShape(n),e.animate(n.id,"style").when(a,{xStart:r,xEnd:s,yStart:l,yEnd:h}).start(o)}function p(e,t,i,n,a){i.style.smooth?t?e.addShape(i):(i.style.pointListLength=1,e.addShape(i),i.style.pointList=i.style.pointList||i.getPointList(i.style),e.animate(i.id,"style").when(n,{pointListLength:i.style.pointList.length}).start(a||"QuinticOut")):(i.style.pointList=t?t.style.pointList:[[i.style.xStart,i.style.yStart],[i.style.xStart,i.style.yStart]],e.addShape(i),e.animate(i.id,"style").when(n,{pointList:[[i.style.xStart,i.style.yStart],[i._x||0,i._y||0]]}).start(a||"QuinticOut"))}var u=e("zrender/tool/util");return{pointList:t,rectangle:n,candle:a,ring:o,sector:r,text:s,polygon:l,ribbon:h,gaugePointer:d,icon:m,line:c,markline:p}}),define("echarts/util/ecEffect",["require","../util/ecData","zrender/shape/Circle","zrender/shape/Image","../util/shape/Icon","../util/shape/Symbol","zrender/tool/env"],function(e){function t(e,t,i,n){var o=i.effect,l=o.color||i.style.strokeColor||i.style.color,d=o.shadowColor||l,m=o.scaleSize,c="undefined"!=typeof o.shadowBlur?o.shadowBlur:m,p=new s({zlevel:n,style:{brushType:"stroke",iconType:"pin"!=i.style.iconType&&"droplet"!=i.style.iconType?i.style.iconType:"circle",x:c+1,y:c+1,n:i.style.n,width:i.style._width*m,height:i.style._height*m,lineWidth:1,strokeColor:l,shadowColor:d,shadowBlur:c},draggable:!1,hoverable:!1});h&&(p.style.image=e.shapeToImage(p,p.style.width+2*c+2,p.style.height+2*c+2).style.image,p=new r({zlevel:p.zlevel,style:p.style,draggable:!1,hoverable:!1})),a.clone(i,p),p.position=i.position,t.push(p),e.addShape(p);var u=window.devicePixelRatio||1,V=(p.style.width/u-i.style._width)/2;p.style.x=i.style._x-V,p.style.y=i.style._y-V;var U=100*(o.period+10*Math.random());e.modShape(i.id,{invisible:!0});var y=p.style.x+p.style.width/2/u,g=p.style.y+p.style.height/2/u;e.modShape(p.id,{scale:[.1,.1,y,g]}),e.animate(p.id,"",o.loop).when(U,{scale:[1,1,y,g]}).done(function(){i.effect.show=!1,e.delShape(p.id)}).start()}function i(e,t,i,n){var a=i.effect,o=a.color||i.style.strokeColor||i.style.color,r=a.scaleSize,s=a.shadowColor||o,h="undefined"!=typeof a.shadowBlur?a.shadowBlur:2*r,d=window.devicePixelRatio||1,m=new l({zlevel:n,position:i.position,scale:i.scale,style:{pointList:i.style.pointList,iconType:i.style.iconType,color:o,strokeColor:o,shadowColor:s,shadowBlur:h*d,random:!0,brushType:"fill",lineWidth:1,size:i.style.size},draggable:!1,hoverable:!1});t.push(m),e.addShape(m),e.modShape(i.id,{invisible:!0});for(var c=Math.round(100*a.period),p={},u={},V=0;20>V;V++)m.style["randomMap"+V]=0,p={},p["randomMap"+V]=100,u={},u["randomMap"+V]=0,m.style["randomMap"+V]=100*Math.random(),e.animate(m.id,"style",!0).when(c,p).when(2*c,u).when(3*c,p).when(4*c,p).delay(Math.random()*c*V).start()}function n(e,t,i,n){var s,l=i.effect,d=l.color||i.style.strokeColor||i.style.color,m=l.shadowColor||i.style.strokeColor||d,c=i.style.lineWidth*l.scaleSize,p="undefined"!=typeof l.shadowBlur?l.shadowBlur:c,u=new o({zlevel:n,style:{x:p,y:p,r:c,color:d,shadowColor:m,shadowBlur:p},draggable:!1,hoverable:!1});h?(u.style.image=e.shapeToImage(u,2*(c+p),2*(c+p)).style.image,u=new r({zlevel:u.zlevel,style:u.style,draggable:!1,hoverable:!1}),s=p):s=0,a.clone(i,u),u.position=i.position,t.push(u),e.addShape(u),u.style.x=i.style.xStart-s,u.style.y=i.style.yStart-s;var V=(i.style.xStart-i.style.xEnd)*(i.style.xStart-i.style.xEnd)+(i.style.yStart-i.style.yEnd)*(i.style.yStart-i.style.yEnd),U=Math.round(Math.sqrt(Math.round(V*l.period*l.period)));if(i.style.smooth){var y=i.style.pointList||i.getPointList(i.style),g=y.length;U=Math.round(U/g);for(var f=e.animate(u.id,"style",l.loop),b=Math.ceil(g/8),_=0;g-b>_;_+=b)f.when(U*(_+1),{x:y[_][0]-s,y:y[_][1]-s});f.when(U*g,{x:y[g-1][0]-s,y:y[g-1][1]-s}),f.done(function(){i.effect.show=!1,e.delShape(u.id)}),f.start("spline")}else e.animate(u.id,"style",l.loop).when(U,{x:i._x-s,y:i._y-s}).done(function(){i.effect.show=!1,e.delShape(u.id)}).start()}var a=e("../util/ecData"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Image"),s=e("../util/shape/Icon"),l=e("../util/shape/Symbol"),h=e("zrender/tool/env").canvasSupported;return{point:t,largePoint:i,line:n}}),define("zrender/shape/Star",["require","../tool/math","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=t.sin,n=t.cos,a=Math.PI,o=e("./Base"),r=function(e){o.call(this,e)};return r.prototype={type:"star",buildPath:function(e,t){var o=t.n;if(o&&!(2>o)){var r=t.x,s=t.y,l=t.r,h=t.r0;null==h&&(h=o>4?l*n(2*a/o)/n(a/o):l/3);var d=a/o,m=-a/2,c=r+l*n(m),p=s+l*i(m);m+=d;var u=t.pointList=[];u.push([c,p]);for(var V,U=0,y=2*o-1;y>U;U++)V=U%2===0?h:l,u.push([r+V*n(m),s+V*i(m)]),m+=d;u.push([c,p]),e.moveTo(u[0][0],u[0][1]);for(var U=0;U=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e("../tool/util").inherits(a,t),a}),define("zrender/shape/Droplet",["require","./Base","./util/PathProxy","zrender/tool/area","../tool/util"],function(e){"use strict";var t=e("./Base"),i=e("./util/PathProxy"),n=e("zrender/tool/area"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:"droplet",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y+t.a),n.bezierCurveTo(t.x+t.a,t.y+t.a,t.x+3*t.a/2,t.y-t.a/3,t.x,t.y-t.b),n.bezierCurveTo(t.x-3*t.a/2,t.y-t.a/3,t.x-t.a,t.y+t.a,t.x,t.y+t.a),n.closePath()},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.getTansform(e,t);e=i[0],t=i[1];var a=this.getRect(this.style);return e>=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e("../tool/util").inherits(a,t),a}),define("zrender/tool/math",[],function(){function e(e,t){return Math.sin(t?e*a:e)}function t(e,t){return Math.cos(t?e*a:e)}function i(e){return e*a}function n(e){return e/a}var a=Math.PI/180;return{sin:e,cos:t,degreeToRadian:i,radianToDegree:n}}),define("zrender/shape/util/PathProxy",["require","../../tool/vector"],function(e){var t=e("../../tool/vector"),i=function(e,t){this.command=e,this.points=t||null},n=function(){this.pathCommands=[],this._ctx=null,this._min=[],this._max=[]};return n.prototype.fastBoundingRect=function(){var e=this._min,i=this._max;e[0]=e[1]=1/0,i[0]=i[1]=-1/0;for(var n=0;nr;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"Q":for(var r=0;4>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"A":var s=o[0],l=o[1],h=o[2],d=o[3];e[0]=Math.min(e[0],e[0],s-h),e[1]=Math.min(e[1],e[1],l-d),i[0]=Math.max(i[0],i[0],s+h),i[1]=Math.max(i[1],i[1],l+d)}}return{x:e[0],y:e[1],width:i[0]-e[0],height:i[1]-e[1]}},n.prototype.begin=function(e){return this._ctx=e||null,this.pathCommands.length=0,this},n.prototype.moveTo=function(e,t){return this.pathCommands.push(new i("M",[e,t])),this._ctx&&this._ctx.moveTo(e,t),this},n.prototype.lineTo=function(e,t){return this.pathCommands.push(new i("L",[e,t])),this._ctx&&this._ctx.lineTo(e,t),this},n.prototype.bezierCurveTo=function(e,t,n,a,o,r){return this.pathCommands.push(new i("C",[e,t,n,a,o,r])),this._ctx&&this._ctx.bezierCurveTo(e,t,n,a,o,r),this},n.prototype.quadraticCurveTo=function(e,t,n,a){return this.pathCommands.push(new i("Q",[e,t,n,a])),this._ctx&&this._ctx.quadraticCurveTo(e,t,n,a),this},n.prototype.arc=function(e,t,n,a,o,r){return this.pathCommands.push(new i("A",[e,t,n,n,a,o-a,0,r?0:1])),this._ctx&&this._ctx.arc(e,t,n,a,o,r),this},n.prototype.arcTo=function(e,t,i,n,a){return this._ctx&&this._ctx.arcTo(e,t,i,n,a),this},n.prototype.rect=function(e,t,i,n){return this._ctx&&this._ctx.rect(e,t,i,n),this},n.prototype.closePath=function(){return this.pathCommands.push(new i("z")),this._ctx&&this._ctx.closePath(),this},n.prototype.isEmpty=function(){return 0===this.pathCommands.length},n.PathSegment=i,n}),define("zrender/shape/Line",["require","./Base","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/dashedLineTo"),n=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return n.prototype={type:"line",buildPath:function(e,t){if(t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var n=(t.lineWidth||1)*("dashed"==t.lineType?5:1);i(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}}else e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=e.lineWidth||1;return e.__rect={x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t},e.__rect}},e("../tool/util").inherits(n,t),n}),define("zrender/shape/BrokenLine",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","./Polygon","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return o.prototype={type:"broken-line",buildPath:function(e,t){var o=t.pointList;if(!(o.length<2)){var r=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length));if(t.smooth&&"spline"!==t.smooth){var s=n(o,t.smooth,!1,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var l,h,d,m=0;r-1>m;m++)l=s[2*m],h=s[2*m+1],d=o[m+1],e.bezierCurveTo(l[0],l[1],h[0],h[1],d[0],d[1])}else if("spline"===t.smooth&&(o=i(o),r=o.length),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var c=(t.lineWidth||1)*("dashed"==t.lineType?5:1);e.moveTo(o[0][0],o[0][1]);for(var m=1;r>m;m++)a(e,o[m-1][0],o[m-1][1],o[m][0],o[m][1],c)}}else{e.moveTo(o[0][0],o[0][1]);for(var m=1;r>m;m++)e.lineTo(o[m][0],o[m][1])}}},getRect:function(t){return e("./Polygon").prototype.getRect(t)}},e("../tool/util").inherits(o,t),o}),define("zrender/shape/util/dashedLineTo",[],function(){var e=[5,5];return function(t,i,n,a,o,r){if(t.setLineDash)return e[0]=e[1]=r,t.setLineDash(e),t.moveTo(i,n),void t.lineTo(a,o);r="number"!=typeof r?5:r;var s=a-i,l=o-n,h=Math.floor(Math.sqrt(s*s+l*l)/r);s/=h,l/=h;for(var d=!0,m=0;h>m;++m)d?t.moveTo(i,n):t.lineTo(i,n),d=!d,i+=s,n+=l;t.lineTo(a,o)}}),define("zrender/shape/util/smoothSpline",["require","../../tool/vector"],function(e){function t(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}var i=e("../../tool/vector");return function(e,n){for(var a=e.length,o=[],r=0,s=1;a>s;s++)r+=i.distance(e[s-1],e[s]);var l=r/5;l=a>l?a:l;for(var s=0;l>s;s++){var h,d,m,c=s/(l-1)*(n?a:a-1),p=Math.floor(c),u=c-p,V=e[p%a];n?(h=e[(p-1+a)%a],d=e[(p+1)%a],m=e[(p+2)%a]):(h=e[0===p?p:p-1],d=e[p>a-2?a-1:p+1],m=e[p>a-3?a-1:p+2]);var U=u*u,y=u*U;o.push([t(h[0],V[0],d[0],m[0],u,U,y),t(h[1],V[1],d[1],m[1],u,U,y)])}return o}}),define("zrender/shape/util/smoothBezier",["require","../../tool/vector"],function(e){var t=e("../../tool/vector");return function(e,i,n,a){var o,r,s,l,h=[],d=[],m=[],c=[],p=!!a;if(p){s=[1/0,1/0],l=[-1/0,-1/0];for(var u=0,V=e.length;V>u;u++)t.min(s,s,e[u]),t.max(l,l,e[u]);t.min(s,s,a[0]),t.max(l,l,a[1])}for(var u=0,V=e.length;V>u;u++){var o,r,U=e[u];if(n)o=e[u?u-1:V-1],r=e[(u+1)%V];else{if(0===u||u===V-1){h.push(e[u]);continue}o=e[u-1],r=e[u+1]}t.sub(d,r,o),t.scale(d,d,i);var y=t.distance(U,o),g=t.distance(U,r),f=y+g;0!==f&&(y/=f,g/=f),t.scale(m,d,-y),t.scale(c,d,g);var b=t.add([],U,m),_=t.add([],U,c);p&&(t.max(b,b,s),t.min(b,b,l),t.max(_,_,s),t.min(_,_,l)),h.push(b),h.push(_)}return n&&h.push(h.shift()),h}}),define("zrender/shape/Polygon",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){t.call(this,e)};return o.prototype={type:"polygon",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e);var n=!1;("fill"==i.brushType||"both"==i.brushType||"undefined"==typeof i.brushType)&&(e.beginPath(),"dashed"==i.lineType||"dotted"==i.lineType?(this.buildPath(e,{lineType:"solid",lineWidth:i.lineWidth,pointList:i.pointList}),n=!1):(this.buildPath(e,i),n=!0),e.closePath(),e.fill()),i.lineWidth>0&&("stroke"==i.brushType||"both"==i.brushType)&&(n||(e.beginPath(),this.buildPath(e,i)),e.stroke()),this.drawText(e,i,this.style),e.restore()},buildPath:function(e,t){var o=t.pointList;if(!(o.length<2))if(t.smooth&&"spline"!==t.smooth){var r=n(o,t.smooth,!0,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var s,l,h,d=o.length,m=0;d>m;m++)s=r[2*m],l=r[2*m+1],h=o[(m+1)%d],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(o=i(o,!0)),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var c=t._dashLength||(t.lineWidth||1)*("dashed"==t.lineType?5:1);t._dashLength=c,e.moveTo(o[0][0],o[0][1]);for(var m=1,p=o.length;p>m;m++)a(e,o[m-1][0],o[m-1][1],o[m][0],o[m][1],c);a(e,o[o.length-1][0],o[o.length-1][1],o[0][0],o[0][1],c)}}else{e.moveTo(o[0][0],o[0][1]);for(var m=1,p=o.length;p>m;m++)e.lineTo(o[m][0],o[m][1]);e.lineTo(o[0][0],o[0][1])}},getRect:function(e){if(e.__rect)return e.__rect;for(var t=Number.MAX_VALUE,i=Number.MIN_VALUE,n=Number.MAX_VALUE,a=Number.MIN_VALUE,o=e.pointList,r=0,s=o.length;s>r;r++)o[r][0]i&&(i=o[r][0]),o[r][1]a&&(a=o[r][1]);var l;return l="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(t-l/2),y:Math.round(n-l/2),width:i-t+l,height:a-n+l},e.__rect}},e("../tool/util").inherits(o,t),o}),define("echarts/util/shape/normalIsCover",[],function(){return function(e,t){var i=this.getTansform(e,t);e=i[0],t=i[1];var n=this.style.__rect;return n||(n=this.style.__rect=this.getRect(this.style)),e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height}}),define("echarts/component/dataView",["require","./base","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._tDom=document.createElement("div"),this._textArea=document.createElement("textArea"),this._buttonRefresh=document.createElement("button"),this._buttonClose=document.createElement("button"),this._hasShow=!1,this._zrHeight=n.getHeight(),this._zrWidth=n.getWidth(),this._tDom.className="echarts-dataview",this.hide(),this.dom.firstChild.appendChild(this._tDom),window.addEventListener?(this._tDom.addEventListener("click",this._stop),this._tDom.addEventListener("mousewheel",this._stop),this._tDom.addEventListener("mousemove",this._stop),this._tDom.addEventListener("mousedown",this._stop),this._tDom.addEventListener("mouseup",this._stop),this._tDom.addEventListener("touchstart",this._stop),this._tDom.addEventListener("touchmove",this._stop),this._tDom.addEventListener("touchend",this._stop)):(this._tDom.attachEvent("onclick",this._stop),this._tDom.attachEvent("onmousewheel",this._stop),this._tDom.attachEvent("onmousemove",this._stop),this._tDom.attachEvent("onmousedown",this._stop),this._tDom.attachEvent("onmouseup",this._stop))}var i=e("./base"),n=e("../config"),a=e("zrender/tool/util");return t.prototype={type:n.COMPONENT_TYPE_DATAVIEW,_lang:["Data View","close","refresh"],_gCssText:"position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;",hide:function(){this._sizeCssText="width:"+this._zrWidth+"px;height:0px;background-color:#f0ffff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},show:function(e){this._hasShow=!0;var t=this.query(this.option,"toolbox.feature.dataView.lang")||this._lang;this.option=e,this._tDom.innerHTML='

'+(t[0]||this._lang[0])+"

",this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:"+(this._zrWidth-15)+"px;height:"+(this._zrHeight-100)+"px;";var i=this.query(this.option,"toolbox.feature.dataView.optionToContent");this._textArea.value="function"!=typeof i?this._optionToContent():i(this.option),this._tDom.appendChild(this._textArea),this._buttonClose.style.cssText="float:right;padding:1px 6px;",this._buttonClose.innerHTML=t[1]||this._lang[1];var n=this;this._buttonClose.onclick=function(){n.hide()},this._tDom.appendChild(this._buttonClose),this.query(this.option,"toolbox.feature.dataView.readOnly")===!1?(this._buttonRefresh.style.cssText="float:right;margin-right:10px;padding:1px 6px;",this._buttonRefresh.innerHTML=t[2]||this._lang[2],this._buttonRefresh.onclick=function(){n._save()},this._tDom.appendChild(this._buttonRefresh),this._textArea.readOnly=!1,this._textArea.style.cursor="default"):(this._textArea.readOnly=!0,this._textArea.style.cursor="text"),this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},_optionToContent:function(){var e,t,i,a,o,r,s=[],l="";if(this.option.xAxis)for(s=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],e=0,a=s.length;a>e;e++)if("category"==(s[e].type||"category")){for(r=[],t=0,i=s[e].data.length;i>t;t++)o=s[e].data[t],r.push("undefined"!=typeof o.value?o.value:o);l+=r.join(", ")+"\n\n"}if(this.option.yAxis)for(s=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],e=0,a=s.length;a>e;e++)if("category"==s[e].type){for(r=[],t=0,i=s[e].data.length;i>t;t++)o=s[e].data[t],r.push("undefined"!=typeof o.value?o.value:o);l+=r.join(", ")+"\n\n"}var h,d=this.option.series;for(e=0,a=d.length;a>e;e++){for(r=[],t=0,i=d[e].data.length;i>t;t++)o=d[e].data[t],h=d[e].type==n.CHART_TYPE_PIE||d[e].type==n.CHART_TYPE_MAP?(o.name||"-")+":":"",d[e].type==n.CHART_TYPE_SCATTER&&(o="undefined"!=typeof o.value?o.value:o,o=o.join(", ")),r.push(h+("undefined"!=typeof o.value?o.value:o));l+=(d[e].name||"-")+" : \n",l+=r.join(d[e].type==n.CHART_TYPE_SCATTER?"\n":", "),l+="\n\n"}return l},_save:function(){var e=this._textArea.value,t=this.query(this.option,"toolbox.feature.dataView.contentToOption");if("function"!=typeof t){e=e.split("\n");for(var i=[],a=0,o=e.length;o>a;a++)e[a]=this._trim(e[a]),""!==e[a]&&i.push(e[a]);this._contentToOption(i)}else t(e,this.option);this.hide();var r=this;setTimeout(function(){r.messageCenter&&r.messageCenter.dispatch(n.EVENT.DATA_VIEW_CHANGED,null,{option:r.option},r.myChart)},r.canvasSupported?800:100)},_contentToOption:function(e){var t,i,a,o,r,s,l,h=[],d=0;if(this.option.xAxis)for(h=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],t=0,o=h.length;o>t;t++)if("category"==(h[t].type||"category")){for(s=e[d].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;d++}if(this.option.yAxis)for(h=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],t=0,o=h.length;o>t;t++)if("category"==h[t].type){for(s=e[d].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;d++}var m=this.option.series;for(t=0,o=m.length;o>t;t++)if(d++,m[t].type==n.CHART_TYPE_SCATTER)for(var i=0,a=m[t].data.length;a>i;i++)s=e[d],l=s.replace(" ","").split(","),"undefined"!=typeof m[t].data[i].value?m[t].data[i].value=l:m[t].data[i]=l,d++;else{s=e[d].split(",");for(var i=0,a=m[t].data.length;a>i;i++)l=(s[i]||"").replace(/.*:/,""),l=this._trim(l),l="-"!=l&&""!==l?l-0:"-","undefined"!=typeof m[t].data[i].value?m[t].data[i].value=l:m[t].data[i]=l;d++}},_trim:function(e){var t=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)","g");return e.replace(t,"")},_stop:function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},resize:function(){this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._tDom.offsetHeight>10&&(this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText,this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:"+(this._zrWidth-15)+"px;height:"+(this._zrHeight-100)+"px;")},dispose:function(){window.removeEventListener?(this._tDom.removeEventListener("click",this._stop),this._tDom.removeEventListener("mousewheel",this._stop),this._tDom.removeEventListener("mousemove",this._stop),this._tDom.removeEventListener("mousedown",this._stop),this._tDom.removeEventListener("mouseup",this._stop),this._tDom.removeEventListener("touchstart",this._stop),this._tDom.removeEventListener("touchmove",this._stop),this._tDom.removeEventListener("touchend",this._stop)):(this._tDom.detachEvent("onclick",this._stop),this._tDom.detachEvent("onmousewheel",this._stop),this._tDom.detachEvent("onmousemove",this._stop),this._tDom.detachEvent("onmousedown",this._stop),this._tDom.detachEvent("onmouseup",this._stop)),this._buttonRefresh.onclick=null,this._buttonClose.onclick=null,this._hasShow&&(this._tDom.removeChild(this._textArea),this._tDom.removeChild(this._buttonRefresh),this._tDom.removeChild(this._buttonClose)),this._textArea=null,this._buttonRefresh=null,this._buttonClose=null,this.dom.firstChild.removeChild(this._tDom),this._tDom=null}},a.inherits(t,i),e("../component").define("dataView",t),t}),define("echarts/util/shape/Cross",["require","zrender/shape/Base","zrender/shape/Line","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Line"),a=e("zrender/tool/util");return t.prototype={type:"cross",buildPath:function(e,t){var i=t.rect;t.xStart=i.x,t.xEnd=i.x+i.width,t.yStart=t.yEnd=t.y,n.prototype.buildPath(e,t),t.xStart=t.xEnd=t.x,t.yStart=i.y,t.yEnd=i.y+i.height,n.prototype.buildPath(e,t)},getRect:function(e){return e.rect},isCover:e("./normalIsCover")},a.inherits(t,i),t}),define("zrender/shape/Sector",["require","../tool/math","../tool/computeBoundingBox","../tool/vector","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=e("../tool/computeBoundingBox"),n=e("../tool/vector"),a=e("./Base"),o=n.create(),r=n.create(),s=n.create(),l=n.create(),h=function(e){a.call(this,e)};return h.prototype={type:"sector",buildPath:function(e,i){var n=i.x,a=i.y,o=i.r0||0,r=i.r,s=i.startAngle,l=i.endAngle,h=i.clockWise||!1;s=t.degreeToRadian(s),l=t.degreeToRadian(l),h||(s=-s,l=-l);var d=t.cos(s),m=t.sin(s);e.moveTo(d*o+n,m*o+a),e.lineTo(d*r+n,m*r+a),e.arc(n,a,r,s,l,!h),e.lineTo(t.cos(l)*o+n,t.sin(l)*o+a),0!==o&&e.arc(n,a,o,l,s,h),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var a=e.x,h=e.y,d=e.r0||0,m=e.r,c=t.degreeToRadian(e.startAngle),p=t.degreeToRadian(e.endAngle),u=e.clockWise;return u||(c=-c,p=-p),d>1?i.arc(a,h,d,c,p,!u,o,s):(o[0]=s[0]=a,o[1]=s[1]=h),i.arc(a,h,m,c,p,!u,r,l),n.min(o,o,r),n.max(s,s,l),e.__rect={x:o[0],y:o[1],width:s[0]-o[0],height:s[1]-o[1]},e.__rect}},e("../tool/util").inherits(h,a),h}),define("echarts/util/shape/Candle",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"candle",_numberOrder:function(e,t){return t-e},buildPath:function(e,t){var i=n.clone(t.y).sort(this._numberOrder);e.moveTo(t.x,i[3]),e.lineTo(t.x,i[2]),e.moveTo(t.x-t.width/2,i[2]),e.rect(t.x-t.width/2,i[2],t.width,i[1]-i[2]),e.moveTo(t.x,i[1]),e.lineTo(t.x,i[0])},getRect:function(e){if(!e.__rect){var t=0;("stroke"==e.brushType||"fill"==e.brushType)&&(t=e.lineWidth||1);var i=n.clone(e.y).sort(this._numberOrder);e.__rect={x:Math.round(e.x-e.width/2-t/2),y:Math.round(i[3]-t/2),width:e.width+t,height:i[0]-i[3]+t}}return e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),define("zrender/tool/computeBoundingBox",["require","./vector","./curve"],function(e){function t(e,t,i){if(0!==e.length){for(var n=e[0][0],a=e[0][0],o=e[0][1],r=e[0][1],s=1;sa&&(a=l[0]),l[1]r&&(r=l[1])}t[0]=n,t[1]=o,i[0]=a,i[1]=r}}function i(e,t,i,n,a,r){var s=[];o.cubicExtrema(e[0],t[0],i[0],n[0],s);for(var l=0;ln&&(n+=2*Math.PI),o%=2*Math.PI,0>o&&(o+=2*Math.PI),n>o&&!h?o+=2*Math.PI:o>n&&h&&(n+=2*Math.PI),h){var c=o;o=n,n=c}for(var p=0;o>p;p+=Math.PI/2)p>n&&(l[0]=Math.cos(p)*i+e,l[1]=Math.sin(p)*i+t,a.min(d,l,d),a.max(m,l,m))};return t.cubeBezier=i,t.quadraticBezier=n,t.arc=h,t}),define("echarts/util/shape/Chain",["require","zrender/shape/Base","./Icon","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/matrix"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/util/dashedLineTo"),o=e("zrender/tool/util"),r=e("zrender/tool/matrix");return t.prototype={type:"chain",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildLinePath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i),e.restore()},buildLinePath:function(e,t){var i=t.x,n=t.y+5,o=t.width,r=t.height/2-10;if(e.moveTo(i,n),e.lineTo(i,n+r),e.moveTo(i+o,n),e.lineTo(i+o,n+r),e.moveTo(i,n+r/2),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var s=(t.lineWidth||1)*("dashed"==t.lineType?5:1);a(e,i,n+r/2,i+o,n+r/2,s)}}else e.lineTo(i+o,n+r/2)},brushSymbol:function(e,t){var i=t.y+t.height/4;e.save();for(var a,o=t.chainPoint,r=0,s=o.length;s>r;r++){if(a=o[r],"none"!=a.symbol){e.beginPath();var l=a.symbolSize;n.prototype.buildPath(e,{iconType:a.symbol,x:a.x-l,y:i-l,width:2*l,height:2*l,n:a.n}),e.fillStyle=a.isEmpty?"#fff":t.strokeColor,e.closePath(),e.fill(),e.stroke()}a.showLabel&&(e.font=a.textFont,e.fillStyle=a.textColor,e.textAlign=a.textAlign,e.textBaseline=a.textBaseline,a.rotation?(e.save(),this._updateTextTransform(e,a.rotation),e.fillText(a.name,a.textX,a.textY),e.restore()):e.fillText(a.name,a.textX,a.textY))}e.restore()},_updateTextTransform:function(e,t){var i=r.create();if(r.identity(i),0!==t[0]){var n=t[1]||0,a=t[2]||0;(n||a)&&r.translate(i,i,[-n,-a]),r.rotate(i,i,t[0]),(n||a)&&r.translate(i,i,[n,a])}e.transform.apply(e,i)},isCover:function(e,t){var i=this.style;return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?!0:!1}},o.inherits(t,i),t}),define("zrender/shape/Ring",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ring",buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,2*Math.PI,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),define("echarts/component/axis",["require","./base","zrender/shape/Line","../config","../util/ecData","zrender/tool/util","zrender/tool/color","./categoryAxis","./valueAxis","../component"],function(e){function t(e,t,n,a,o,r){i.call(this,e,t,n,a,o),this.axisType=r,this._axisList=[],this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Line"),a=e("../config"),o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.COMPONENT_TYPE_AXIS,axisBase:{_buildAxisLine:function(){var e=this.option.axisLine.lineStyle.width,t=e/2,i={_axisShape:"axisLine",zlevel:this._zlevelBase+1,hoverable:!1};switch(this.option.position){case"left":i.style={xStart:this.grid.getX()-t,yStart:this.grid.getYend(),xEnd:this.grid.getX()-t,yEnd:this.grid.getY(),lineCap:"round"};break;case"right":i.style={xStart:this.grid.getXend()+t,yStart:this.grid.getYend(),xEnd:this.grid.getXend()+t,yEnd:this.grid.getY(),lineCap:"round"};break;case"bottom":i.style={xStart:this.grid.getX(),yStart:this.grid.getYend()+t,xEnd:this.grid.getXend(),yEnd:this.grid.getYend()+t,lineCap:"round"};break;case"top":i.style={xStart:this.grid.getX(),yStart:this.grid.getY()-t,xEnd:this.grid.getXend(),yEnd:this.grid.getY()-t,lineCap:"round"}}""!==this.option.name&&(i.style.text=this.option.name,i.style.textPosition=this.option.nameLocation,i.style.textFont=this.getFont(this.option.nameTextStyle),this.option.nameTextStyle.align&&(i.style.textAlign=this.option.nameTextStyle.align),this.option.nameTextStyle.baseline&&(i.style.textBaseline=this.option.nameTextStyle.baseline),this.option.nameTextStyle.color&&(i.style.textColor=this.option.nameTextStyle.color)),i.style.strokeColor=this.option.axisLine.lineStyle.color,i.style.lineWidth=e,this.isHorizontal()?i.style.yStart=i.style.yEnd=this.subPixelOptimize(i.style.yEnd,e):i.style.xStart=i.style.xEnd=this.subPixelOptimize(i.style.xEnd,e),i.style.lineType=this.option.axisLine.lineStyle.type,i=new n(i),this.shapeList.push(i)},_axisLabelClickable:function(e,t){return e?(o.pack(t,void 0,-1,void 0,-1,t.style.text),t.hoverable=!0,t.clickable=!0,t.highlightStyle={color:s.lift(t.style.color,1),brushType:"fill"},t):t},refixAxisShape:function(e,t){if(this.option.axisLine.onZero){var i;if(this.isHorizontal()&&null!=t)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.yStart=this.shapeList[n].style.yEnd=this.subPixelOptimize(t,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.yEnd-this.shapeList[n].style.yStart,this.shapeList[n].style.yStart=t-i,this.shapeList[n].style.yEnd=t,this.zr.modShape(this.shapeList[n].id));if(!this.isHorizontal()&&null!=e)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.xStart=this.shapeList[n].style.xEnd=this.subPixelOptimize(e,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.xEnd-this.shapeList[n].style.xStart,this.shapeList[n].style.xStart=e,this.shapeList[n].style.xEnd=e+i,this.zr.modShape(this.shapeList[n].id))}},getPosition:function(){return this.option.position},isHorizontal:function(){return"bottom"===this.option.position||"top"===this.option.position}},reformOption:function(e){if(!e||e instanceof Array&&0===e.length?e=[{type:a.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]),"xAxis"===this.axisType){(!e[0].position||"bottom"!=e[0].position&&"top"!=e[0].position)&&(e[0].position="bottom"),e.length>1&&(e[1].position="bottom"===e[0].position?"top":"bottom");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"category",e[t].xAxisIndex=t,e[t].yAxisIndex=-1}else{(!e[0].position||"left"!=e[0].position&&"right"!=e[0].position)&&(e[0].position="left"),e.length>1&&(e[1].position="left"===e[0].position?"right":"left");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"value",e[t].xAxisIndex=-1,e[t].yAxisIndex=t}return e},refresh:function(t){var i;t&&(this.option=t,"xAxis"===this.axisType?(this.option.xAxis=this.reformOption(t.xAxis),i=this.option.xAxis):(this.option.yAxis=this.reformOption(t.yAxis),i=this.option.yAxis),this.series=t.series);for(var n=e("./categoryAxis"),a=e("./valueAxis"),o=Math.max(i&&i.length||0,this._axisList.length),r=0;o>r;r++)!this._axisList[r]||!t||i[r]&&this._axisList[r].type==i[r].type||(this._axisList[r].dispose&&this._axisList[r].dispose(),this._axisList[r]=!1),this._axisList[r]?this._axisList[r].refresh&&this._axisList[r].refresh(i?i[r]:!1,this.series):i&&i[r]&&(this._axisList[r]="category"===i[r].type?new n(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase):new a(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase,this.series))},getAxis:function(e){return this._axisList[e]},clear:function(){for(var e=0,t=this._axisList.length;t>e;e++)this._axisList[e].dispose&&this._axisList[e].dispose();this._axisList=[]}},r.inherits(t,i),e("../component").define("axis",t),t}),define("echarts/component/grid",["require","./base","zrender/shape/Rectangle","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("../config"),o=e("zrender/tool/util");return t.prototype={type:a.COMPONENT_TYPE_GRID,getX:function(){return this._x},getY:function(){return this._y},getWidth:function(){return this._width},getHeight:function(){return this._height},getXend:function(){return this._x+this._width},getYend:function(){return this._y+this._height},getArea:function(){return{x:this._x,y:this._y,width:this._width,height:this._height}},getBbox:function(){return[[this._x,this._y],[this.getXend(),this.getYend()]]},refixAxisShape:function(e){for(var t,i,n,o=e.xAxis._axisList.concat(e.yAxis?e.yAxis._axisList:[]),r=o.length;r--;)n=o[r],n.type==a.COMPONENT_TYPE_AXIS_VALUE&&n._min<0&&n._max>=0&&(n.isHorizontal()?t=n.getCoord(0):i=n.getCoord(0));if("undefined"!=typeof t||"undefined"!=typeof i)for(r=o.length;r--;)o[r].refixAxisShape(t,i)},refresh:function(e){if(e||this._zrWidth!=this.zr.getWidth()||this._zrHeight!=this.zr.getHeight()){this.clear(),this.option=e||this.option,this.option.grid=this.reformOption(this.option.grid);var t=this.option.grid;this._zrWidth=this.zr.getWidth(),this._zrHeight=this.zr.getHeight(),this._x=this.parsePercent(t.x,this._zrWidth),this._y=this.parsePercent(t.y,this._zrHeight);var i=this.parsePercent(t.x2,this._zrWidth),a=this.parsePercent(t.y2,this._zrHeight);this._width="undefined"==typeof t.width?this._zrWidth-this._x-i:this.parsePercent(t.width,this._zrWidth),this._width=this._width<=0?10:this._width,this._height="undefined"==typeof t.height?this._zrHeight-this._y-a:this.parsePercent(t.height,this._zrHeight),this._height=this._height<=0?10:this._height,this._x=this.subPixelOptimize(this._x,t.borderWidth),this._y=this.subPixelOptimize(this._y,t.borderWidth),this.shapeList.push(new n({zlevel:this._zlevelBase,hoverable:!1,style:{x:this._x,y:this._y,width:this._width,height:this._height,brushType:t.borderWidth>0?"both":"fill",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}})),this.zr.addShape(this.shapeList[0])}}},o.inherits(t,i),e("../component").define("grid",t),t}),define("echarts/component/dataZoom",["require","./base","zrender/shape/Rectangle","zrender/shape/Polygon","../util/shape/Icon","../config","../util/date","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},this._fillerSize=28,this._handleSize=8,this._isSilence=!1,this._zoom={},this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom.show&&this._buildShape(),this._syncData()}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Polygon"),o=e("../util/shape/Icon"),r=e("../config"),s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_DATAZOOM,_buildShape:function(){this._buildBackground(),this._buildFiller(),this._buildHandle(),this._buildFrame();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncFrameShape()},_getLocation:function(){var e,t,i,n,a=this.component.grid;return"horizontal"==this.zoomOption.orient?(i=this.zoomOption.width||a.getWidth(),n=this.zoomOption.height||this._fillerSize,e=null!=this.zoomOption.x?this.zoomOption.x:a.getX(),t=null!=this.zoomOption.y?this.zoomOption.y:this.zr.getHeight()-n-2):(i=this.zoomOption.width||this._fillerSize,n=this.zoomOption.height||a.getHeight(),e=null!=this.zoomOption.x?this.zoomOption.x:2,t=null!=this.zoomOption.y?this.zoomOption.y:a.getY()),{x:e,y:t,width:i,height:n}},_getZoom:function(){var e=this.option.series,t=this.option.xAxis;!t||t instanceof Array||(t=[t],this.option.xAxis=t);var i=this.option.yAxis;!i||i instanceof Array||(i=[i],this.option.yAxis=i);var n,a,o=[],s=this.zoomOption.xAxisIndex;if(t&&null==s){n=[];for(var l=0,h=t.length;h>l;l++)("category"==t[l].type||null==t[l].type)&&n.push(l)}else n=s instanceof Array?s:null!=s?[s]:[];if(s=this.zoomOption.yAxisIndex,i&&null==s){a=[];for(var l=0,h=i.length;h>l;l++)"category"==i[l].type&&a.push(l)}else a=s instanceof Array?s:null!=s?[s]:[];for(var d,l=0,h=e.length;h>l;l++)if(d=e[l],d.type==r.CHART_TYPE_LINE||d.type==r.CHART_TYPE_BAR||d.type==r.CHART_TYPE_SCATTER||d.type==r.CHART_TYPE_K){for(var m=0,c=n.length;c>m;m++)if(n[m]==(d.xAxisIndex||0)){o.push(l);break}for(var m=0,c=a.length;c>m;m++)if(a[m]==(d.yAxisIndex||0)){o.push(l);break}null==this.zoomOption.xAxisIndex&&null==this.zoomOption.yAxisIndex&&d.data&&d.data[0]&&d.data[0]instanceof Array&&(d.type==r.CHART_TYPE_SCATTER||d.type==r.CHART_TYPE_LINE||d.type==r.CHART_TYPE_BAR)&&o.push(l)}var p=null!=this._zoom.start?this._zoom.start:null!=this.zoomOption.start?this.zoomOption.start:0,u=null!=this._zoom.end?this._zoom.end:null!=this.zoomOption.end?this.zoomOption.end:100;p>u&&(p+=u,u=p-u,p-=u);var V=Math.round((u-p)/100*("horizontal"==this.zoomOption.orient?this._location.width:this._location.height));return{start:p,end:u,start2:0,end2:100,size:V,xAxisIndex:n,yAxisIndex:a,seriesIndex:o,scatterMap:this._zoom.scatterMap||{}}},_backupData:function(){this._originalData={xAxis:{},yAxis:{},series:{}};for(var e=this.option.xAxis,t=this._zoom.xAxisIndex,i=0,n=t.length;n>i;i++)this._originalData.xAxis[t[i]]=e[t[i]].data;for(var a=this.option.yAxis,o=this._zoom.yAxisIndex,i=0,n=o.length;n>i;i++)this._originalData.yAxis[o[i]]=a[o[i]].data;for(var s,l=this.option.series,h=this._zoom.seriesIndex,i=0,n=h.length;n>i;i++)s=l[h[i]],this._originalData.series[h[i]]=s.data,s.data&&s.data[0]&&s.data[0]instanceof Array&&(s.type==r.CHART_TYPE_SCATTER||s.type==r.CHART_TYPE_LINE||s.type==r.CHART_TYPE_BAR)&&(this._backupScale(),this._calculScatterMap(h[i]))},_calculScatterMap:function(t){this._zoom.scatterMap=this._zoom.scatterMap||{},this._zoom.scatterMap[t]=this._zoom.scatterMap[t]||{};var i=e("../component"),n=i.get("axis"),a=l.clone(this.option.xAxis);"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value");var o=new n(this.ecTheme,null,!1,{xAxis:a,series:this.option.series},this,"xAxis"),r=this.option.series[t].xAxisIndex||0;this._zoom.scatterMap[t].x=o.getAxis(r).getExtremum(),o.dispose(),a=l.clone(this.option.yAxis),"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value"),o=new n(this.ecTheme,null,!1,{yAxis:a,series:this.option.series},this,"yAxis"),r=this.option.series[t].yAxisIndex||0,this._zoom.scatterMap[t].y=o.getAxis(r).getExtremum(),o.dispose()},_buildBackground:function(){var e=this._location.width,t=this._location.height;this.shapeList.push(new n({zlevel:this._zlevelBase,hoverable:!1,style:{x:this._location.x,y:this._location.y,width:e,height:t,color:this.zoomOption.backgroundColor}}));for(var i=0,o=this._originalData.xAxis,s=this._zoom.xAxisIndex,l=0,h=s.length;h>l;l++)i=Math.max(i,o[s[l]].length);for(var d=this._originalData.yAxis,m=this._zoom.yAxisIndex,l=0,h=m.length;h>l;l++)i=Math.max(i,d[m[l]].length);for(var c,p=this._zoom.seriesIndex[0],u=this._originalData.series[p],V=Number.MIN_VALUE,U=Number.MAX_VALUE,l=0,h=u.length;h>l;l++)c=null!=u[l]?null!=u[l].value?u[l].value:u[l]:0,this.option.series[p].type==r.CHART_TYPE_K&&(c=c[1]),isNaN(c)&&(c=0),V=Math.max(V,c),U=Math.min(U,c);var y=V-U,g=[],f=e/(i-(i>1?1:0)),b=t/(i-(i>1?1:0)),_=1;"horizontal"==this.zoomOption.orient&&1>f?_=Math.floor(3*i/e):"vertical"==this.zoomOption.orient&&1>b&&(_=Math.floor(3*i/t));for(var l=0,h=i;h>l;l+=_)c=null!=u[l]?null!=u[l].value?u[l].value:u[l]:0,this.option.series[p].type==r.CHART_TYPE_K&&(c=c[1]),isNaN(c)&&(c=0),g.push("horizontal"==this.zoomOption.orient?[this._location.x+f*l,this._location.y+t-1-Math.round((c-U)/y*(t-10))]:[this._location.x+1+Math.round((c-U)/y*(e-10)),this._location.y+b*l]);"horizontal"==this.zoomOption.orient?(g.push([this._location.x+e,this._location.y+t]),g.push([this._location.x,this._location.y+t])):(g.push([this._location.x,this._location.y+t]),g.push([this._location.x,this._location.y])),this.shapeList.push(new a({zlevel:this._zlevelBase,style:{pointList:g,color:this.zoomOption.dataBackgroundColor},hoverable:!1}))},_buildFiller:function(){this._fillerShae={zlevel:this._zlevelBase,draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,_type:"filler"},this._fillerShae.style="horizontal"==this.zoomOption.orient?{x:this._location.x+Math.round(this._zoom.start/100*this._location.width)+this._handleSize,y:this._location.y,width:this._zoom.size-2*this._handleSize,height:this._location.height,color:this.zoomOption.fillerColor,text:":::",textPosition:"inside"}:{x:this._location.x,y:this._location.y+Math.round(this._zoom.start/100*this._location.height)+this._handleSize,width:this._location.width,height:this._zoom.size-2*this._handleSize,color:this.zoomOption.fillerColor,text:"::",textPosition:"inside"},this._fillerShae.highlightStyle={brushType:"fill",color:"rgba(0,0,0,0)"},this._fillerShae=new n(this._fillerShae),this.shapeList.push(this._fillerShae)},_buildHandle:function(){this._startShape={zlevel:this._zlevelBase,draggable:!0,style:{iconType:"rectangle",x:this._location.x,y:this._location.y,width:this._handleSize,height:this._handleSize,color:this.zoomOption.handleColor,text:"=",textPosition:"inside"},highlightStyle:{text:"",brushType:"fill",textPosition:"left"},ondrift:this._ondrift,ondragend:this._ondragend},"horizontal"==this.zoomOption.orient?(this._startShape.style.height=this._location.height,this._endShape=l.clone(this._startShape),this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endShape.highlightStyle.textPosition="right"):(this._startShape.style.width=this._location.width,this._endShape=l.clone(this._startShape),this._startShape.style.y=this._fillerShae.style.y-this._handleSize,this._startShape.highlightStyle.textPosition="top",this._endShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._endShape.highlightStyle.textPosition="bottom"),this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_buildFrame:function(){var e=this.subPixelOptimize(this._location.x,1),t=this.subPixelOptimize(this._location.y,1);this._startFrameShape={zlevel:this._zlevelBase,hoverable:!1,style:{x:e,y:t,width:this._location.width-(e>this._location.x?1:0),height:this._location.height-(t>this._location.y?1:0),lineWidth:1,brushType:"stroke",strokeColor:this.zoomOption.handleColor}},this._endFrameShape=l.clone(this._startFrameShape),this._startFrameShape=new n(this._startFrameShape),this._endFrameShape=new n(this._endFrameShape),this.shapeList.push(this._startFrameShape),this.shapeList.push(this._endFrameShape)},_syncHandleShape:function(){"horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._zoom.start=Math.floor((this._startShape.style.x-this._location.x)/this._location.width*100),this._zoom.end=Math.ceil((this._endShape.style.x+this._handleSize-this._location.x)/this._location.width*100)):(this._startShape.style.y=this._fillerShae.style.y-this._handleSize,this._endShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._zoom.start=Math.floor((this._startShape.style.y-this._location.y)/this._location.height*100),this._zoom.end=Math.ceil((this._endShape.style.y+this._handleSize-this._location.y)/this._location.height*100)),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this._syncFrameShape(),this.zr.refresh()},_syncFillerShape:function(){var e,t;"horizontal"==this.zoomOption.orient?(e=this._startShape.style.x,t=this._endShape.style.x,this._fillerShae.style.x=Math.min(e,t)+this._handleSize,this._fillerShae.style.width=Math.abs(e-t)-this._handleSize,this._zoom.start=Math.floor((Math.min(e,t)-this._location.x)/this._location.width*100),this._zoom.end=Math.ceil((Math.max(e,t)+this._handleSize-this._location.x)/this._location.width*100)):(e=this._startShape.style.y,t=this._endShape.style.y,this._fillerShae.style.y=Math.min(e,t)+this._handleSize,this._fillerShae.style.height=Math.abs(e-t)-this._handleSize,this._zoom.start=Math.floor((Math.min(e,t)-this._location.y)/this._location.height*100),this._zoom.end=Math.ceil((Math.max(e,t)+this._handleSize-this._location.y)/this._location.height*100)),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refresh()},_syncFrameShape:function(){"horizontal"==this.zoomOption.orient?(this._startFrameShape.style.width=this._fillerShae.style.x-this._location.x,this._endFrameShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endFrameShape.style.width=this._location.x+this._location.width-this._endFrameShape.style.x):(this._startFrameShape.style.height=this._fillerShae.style.y-this._location.y,this._endFrameShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._endFrameShape.style.height=this._location.y+this._location.height-this._endFrameShape.style.y),this.zr.modShape(this._startFrameShape.id),this.zr.modShape(this._endFrameShape.id)},_syncShape:function(){this.zoomOption.show&&("horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._location.x+this._zoom.start/100*this._location.width,this._endShape.style.x=this._location.x+this._zoom.end/100*this._location.width-this._handleSize,this._fillerShae.style.x=this._startShape.style.x+this._handleSize,this._fillerShae.style.width=this._endShape.style.x-this._startShape.style.x-this._handleSize):(this._startShape.style.y=this._location.y+this._zoom.start/100*this._location.height,this._endShape.style.y=this._location.y+this._zoom.end/100*this._location.height-this._handleSize,this._fillerShae.style.y=this._startShape.style.y+this._handleSize,this._fillerShae.style.height=this._endShape.style.y-this._startShape.style.y-this._handleSize),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refresh())},_syncData:function(e){var t,i,n,a,o;for(var s in this._originalData){t=this._originalData[s];for(var l in t)o=t[l],null!=o&&(a=o.length,i=Math.floor(this._zoom.start/100*a),n=Math.ceil(this._zoom.end/100*a),this.option[s][l].data[0]instanceof Array&&this.option[s][l].type!=r.CHART_TYPE_K?(this._setScale(),this.option[s][l].data=this._synScatterData(l,o)):this.option[s][l].data=o.slice(i,n))}this._isSilence||!this.zoomOption.realtime&&!e||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart)},_synScatterData:function(e,t){if(0===this._zoom.start&&100==this._zoom.end&&0===this._zoom.start2&&100==this._zoom.end2)return t;var i,n,a,o,r,s=[],l=this._zoom.scatterMap[e];"horizontal"==this.zoomOption.orient?(i=l.x.max-l.x.min,n=this._zoom.start/100*i+l.x.min,a=this._zoom.end/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start2/100*i+l.y.min,r=this._zoom.end2/100*i+l.y.min):(i=l.x.max-l.x.min,n=this._zoom.start2/100*i+l.x.min,a=this._zoom.end2/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start/100*i+l.y.min,r=this._zoom.end/100*i+l.y.min);for(var h,d=0,m=t.length;m>d;d++)h=t[d].value||t[d],h[0]>=n&&h[0]<=a&&h[1]>=o&&h[1]<=r&&s.push(t[d]);return s},_setScale:function(){var e=0!==this._zoom.start||100!==this._zoom.end||0!==this._zoom.start2||100!==this._zoom.end2,t={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var i in t)for(var n=0,a=t[i].length;a>n;n++)t[i][n].scale=e||t[i][n]._scale},_backupScale:function(){var e={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var t in e)for(var i=0,n=e[t].length;n>i;i++)e[t][i]._scale=e[t][i].scale},_getDetail:function(){var e="horizontal"==this.zoomOption.orient?"xAxis":"yAxis",t=this._originalData[e];for(var i in t){var n=t[i];if(null!=n){var a=n.length,o=Math.floor(this._zoom.start/100*a),r=Math.ceil(this._zoom.end/100*a);return r-=r>=a?1:0,{start:null!=n[o].value?n[o].value:n[o],end:null!=n[r].value?n[r].value:n[r]}}}var l=this._zoom.seriesIndex[0],h=this.option.series[l][e+"Index"]||0,d=this.option[e][h].type,m=this._zoom.scatterMap[l][e.charAt(0)].min,c=this._zoom.scatterMap[l][e.charAt(0)].max,p=c-m;if("value"==d)return{start:m+p*this._zoom.start/100,end:m+p*this._zoom.end/100};if("time"==d){c=m+p*this._zoom.end/100,m+=p*this._zoom.start/100;var u=s.getAutoFormatter(m,c).formatter;return{start:s.format(u,m),end:s.format(u,c)}}return{start:"",end:""}},__ondrift:function(e,t,i){this.zoomOption.zoomLock&&(e=this._fillerShae);var n="filler"==e._type?this._handleSize:0;if("horizontal"==this.zoomOption.orient?e.style.x+t-n<=this._location.x?e.style.x=this._location.x+n:e.style.x+t+e.style.width+n>=this._location.x+this._location.width?e.style.x=this._location.x+this._location.width-e.style.width-n:e.style.x+=t:e.style.y+i-n<=this._location.y?e.style.y=this._location.y+n:e.style.y+i+e.style.height+n>=this._location.y+this._location.height?e.style.y=this._location.y+this._location.height-e.style.height-n:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(),this.zoomOption.realtime&&this._syncData(),this.zoomOption.showDetail){var a=this._getDetail();this._startShape.style.text=this._startShape.highlightStyle.text=a.start,this._endShape.style.text=this._endShape.highlightStyle.text=a.end,this._startShape.style.textPosition=this._startShape.highlightStyle.textPosition,this._endShape.style.textPosition=this._endShape.highlightStyle.textPosition}return!0},__ondragend:function(){this.zoomOption.showDetail&&(this._startShape.style.text=this._endShape.style.text="=",this._startShape.style.textPosition=this._endShape.style.textPosition="inside",this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.refreshNextFrame()),this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.zoomOption.realtime&&this._syncData(),t.dragOut=!0,t.dragIn=!0,this._isSilence||this.zoomOption.realtime||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart),t.needRefresh=!1,this.isDragend=!1)},ondataZoom:function(e,t){t.needRefresh=!0},absoluteZoom:function(e){this._zoom.start=e.start,this._zoom.end=e.end,this._zoom.start2=e.start2,this._zoom.end2=e.end2,this._syncShape(),this._syncData(!0)},rectZoom:function(e){if(!e)return this._zoom.start=this._zoom.start2=0,this._zoom.end=this._zoom.end2=100,this._syncShape(),this._syncData(!0),this._zoom;var t=this.component.grid.getArea(),i={x:e.x,y:e.y,width:e.width,height:e.height};if(i.width<0&&(i.x+=i.width,i.width=-i.width),i.height<0&&(i.y+=i.height,i.height=-i.height),i.x>t.x+t.width||i.y>t.y+t.height)return!1;i.xt.x+t.width&&(i.width=t.x+t.width-i.x),i.y+i.height>t.y+t.height&&(i.height=t.y+t.height-i.y);var n,a=(i.x-t.x)/t.width,o=1-(i.x+i.width-t.x)/t.width,r=1-(i.y+i.height-t.y)/t.height,s=(i.y-t.y)/t.height;return"horizontal"==this.zoomOption.orient?(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*a,this._zoom.end-=n*o,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*r,this._zoom.end2-=n*s):(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*r,this._zoom.end-=n*s,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*a,this._zoom.end2-=n*o),this._syncShape(),this._syncData(!0),this._zoom},syncBackupData:function(e){for(var t,i,n=this._originalData.series,a=e.series,o=0,r=a.length;r>o;o++){i=a[o].data||a[o].eventList,t=n[o]?Math.floor(this._zoom.start/100*n[o].length):0;for(var s=0,l=i.length;l>s;s++)n[o]&&(n[o][s+t]=i[s])}},syncOption:function(e){this.silence(!0),this.option=e,this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom&&this.option.dataZoom.show&&this._buildShape(),this._syncData(),this.silence(!1)},silence:function(e){this._isSilence=e},getRealDataIndex:function(e,t){if(!this._originalData||0===this._zoom.start&&100==this._zoom.end)return t;var i=this._originalData.series;return i[e]?Math.floor(this._zoom.start/100*i[e].length)+t:-1},resize:function(){this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this.option.dataZoom.show&&this._buildShape()}},l.inherits(t,i),e("../component").define("dataZoom",t),t}),define("echarts/component/categoryAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o,r){if(a.data.length<1)return void console.error("option.data.length < 1.");i.call(this,e,t,n,a,o),this.grid=this.component.grid;for(var s in r)this[s]=r[s];this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config"),s=e("zrender/tool/util"),l=e("zrender/tool/area");return t.prototype={type:r.COMPONENT_TYPE_AXIS_CATEGORY,_getReformedLabel:function(e){var t="undefined"!=typeof this.option.data[e].value?this.option.data[e].value:this.option.data[e],i=this.option.data[e].formatter||this.option.axisLabel.formatter;return i&&("function"==typeof i?t=i.call(this.myChart,t):"string"==typeof i&&(t=i.replace("{value}",t))),t},_getInterval:function(){var e=this.option.axisLabel.interval;if("auto"==e){var t=this.option.axisLabel.textStyle.fontSize,i=this.option.data,n=this.option.data.length;if(this.isHorizontal())if(n>3){var a,o,r=this.getGap(),h=!1,d=Math.floor(.5/r);for(d=1>d?1:d,e=Math.floor(15/r);!h&&n>e;){e+=d,h=!0,a=Math.floor(r*e);for(var m=Math.floor((n-1)/e)*e;m>=0;m-=e){if(0!==this.option.axisLabel.rotate)o=t;else if(i[m].textStyle)o=l.getTextWidth(this._getReformedLabel(m),this.getFont(s.merge(i[m].textStyle,this.option.axisLabel.textStyle)));else{var c=this._getReformedLabel(m)+"",p=(c.match(/\w/g)||"").length,u=c.length-p;o=p*t*2/3+u*t}if(o>a){h=!1;break}}}}else e=1;else if(n>3){var r=this.getGap();for(e=Math.floor(11/r);t>r*e-6&&n>e;)e++}else e=1}else e=e-0+1;return e},_buildShape:function(){if(this._interval=this._getInterval(),this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this.option.data.length,i=this.option.axisTick,n=i.length,o=i.lineStyle.color,r=i.lineStyle.width,s="auto"==i.interval?this._interval:i.interval-0+1,l=i.onGap,h=l?this.getGap()/2:"undefined"==typeof l&&this.option.boundaryGap?this.getGap()/2:0,d=h>0?-s:0;if(this.isHorizontal())for(var m,c="bottom"==this.option.position?i.inside?this.grid.getYend()-n-1:this.grid.getYend()+1:i.inside?this.grid.getY()+1:this.grid.getY()-n-1,p=d;t>p;p+=s)m=this.subPixelOptimize(this.getCoordByIndex(p)+(p>=0?h:0),r),e={_axisShape:"axisTick",zlevel:this._zlevelBase,hoverable:!1,style:{xStart:m,yStart:c,xEnd:m,yEnd:c+n,strokeColor:o,lineWidth:r}},this.shapeList.push(new a(e)); +else for(var u,V="left"==this.option.position?i.inside?this.grid.getX()+1:this.grid.getX()-n-1:i.inside?this.grid.getXend()-n-1:this.grid.getXend()+1,p=d;t>p;p+=s)u=this.subPixelOptimize(this.getCoordByIndex(p)-(p>=0?h:0),r),e={_axisShape:"axisTick",zlevel:this._zlevelBase,hoverable:!1,style:{xStart:V,yStart:u,xEnd:V+n,yEnd:u,strokeColor:o,lineWidth:r}},this.shapeList.push(new a(e))},_buildAxisLabel:function(){var e,t,i=this.option.data,a=this.option.data.length,o=this.option.axisLabel.rotate,r=this.option.axisLabel.margin,l=this.option.axisLabel.clickable,h=this.option.axisLabel.textStyle;if(this.isHorizontal()){var d,m;"bottom"==this.option.position?(d=this.grid.getYend()+r,m="top"):(d=this.grid.getY()-r,m="bottom");for(var c=0;a>c;c+=this._interval)""!==this._getReformedLabel(c)&&(t=s.merge(i[c].textStyle||{},h),e={zlevel:this._zlevelBase,hoverable:!1,style:{x:this.getCoordByIndex(c),y:d,color:t.color,text:this._getReformedLabel(c),textFont:this.getFont(t),textAlign:t.align||"center",textBaseline:t.baseline||m}},o&&(e.style.textAlign=o>0?"bottom"==this.option.position?"right":"left":"bottom"==this.option.position?"left":"right",e.rotation=[o*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(l,e))))}else{var p,u;"left"==this.option.position?(p=this.grid.getX()-r,u="right"):(p=this.grid.getXend()+r,u="left");for(var c=0;a>c;c+=this._interval)""!==this._getReformedLabel(c)&&(t=s.merge(i[c].textStyle||{},h),e={zlevel:this._zlevelBase,hoverable:!1,style:{x:p,y:this.getCoordByIndex(c),color:t.color,text:this._getReformedLabel(c),textFont:this.getFont(t),textAlign:t.align||u,textBaseline:t.baseline||0===c&&""!==this.option.name?"bottom":c==a-1&&""!==this.option.name?"top":"middle"}},o&&(e.rotation=[o*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(l,e))))}},_buildSplitLine:function(){var e,t=this.option.data.length,i=this.option.splitLine,n=i.lineStyle.type,o=i.lineStyle.width,r=i.lineStyle.color;r=r instanceof Array?r:[r];var s=r.length,l=i.onGap,h=l?this.getGap()/2:"undefined"==typeof l&&this.option.boundaryGap?this.getGap()/2:0;if(t-=l||"undefined"==typeof l&&this.option.boundaryGap?1:0,this.isHorizontal())for(var d,m=this.grid.getY(),c=this.grid.getYend(),p=0;t>p;p+=this._interval)d=this.subPixelOptimize(this.getCoordByIndex(p)+h,o),e={zlevel:this._zlevelBase,hoverable:!1,style:{xStart:d,yStart:m,xEnd:d,yEnd:c,strokeColor:r[p/this._interval%s],lineType:n,lineWidth:o}},this.shapeList.push(new a(e));else for(var u,V=this.grid.getX(),U=this.grid.getXend(),p=0;t>p;p+=this._interval)u=this.subPixelOptimize(this.getCoordByIndex(p)-h,o),e={zlevel:this._zlevelBase,hoverable:!1,style:{xStart:V,yStart:u,xEnd:U,yEnd:u,strokeColor:r[p/this._interval%s],linetype:n,lineWidth:o}},this.shapeList.push(new a(e))},_buildSplitArea:function(){var e,t=this.option.splitArea,i=t.areaStyle.color;if(i instanceof Array){var n=i.length,a=this.option.data.length,r=t.onGap,s=r?this.getGap()/2:"undefined"==typeof r&&this.option.boundaryGap?this.getGap()/2:0;if(this.isHorizontal())for(var l,h=this.grid.getY(),d=this.grid.getHeight(),m=this.grid.getX(),c=0;a>=c;c+=this._interval)l=a>c?this.getCoordByIndex(c)+s:this.grid.getXend(),e={zlevel:this._zlevelBase,hoverable:!1,style:{x:m,y:h,width:l-m,height:d,color:i[c/this._interval%n]}},this.shapeList.push(new o(e)),m=l;else for(var p,u=this.grid.getX(),V=this.grid.getWidth(),U=this.grid.getYend(),c=0;a>=c;c+=this._interval)p=a>c?this.getCoordByIndex(c)-s:this.grid.getY(),e={zlevel:this._zlevelBase,hoverable:!1,style:{x:u,y:p,width:V,height:U-p,color:i[c/this._interval%n]}},this.shapeList.push(new o(e)),U=p}else e={zlevel:this._zlevelBase,hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:i}},this.shapeList.push(new o(e))},refresh:function(e){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=s.merge(this.option.axisLabel.textStyle||{},this.ecTheme.textStyle)),this.clear(),this._buildShape()},getGap:function(){var e=this.option.data.length,t=this.isHorizontal()?this.grid.getWidth():this.grid.getHeight();return this.option.boundaryGap?t/e:t/(e>1?e-1:1)},getCoord:function(e){for(var t=this.option.data,i=t.length,n=this.getGap(),a=this.option.boundaryGap?n/2:0,o=0;i>o;o++){if(t[o]==e||"undefined"!=typeof t[o].value&&t[o].value==e)return a=this.isHorizontal()?this.grid.getX()+a:this.grid.getYend()-a;a+=n}},getCoordByIndex:function(e){if(0>e)return this.isHorizontal()?this.grid.getX():this.grid.getYend();if(e>this.option.data.length-1)return this.isHorizontal()?this.grid.getXend():this.grid.getY();var t=this.getGap(),i=this.option.boundaryGap?t/2:0;return i+=e*t,i=this.isHorizontal()?this.grid.getX()+i:this.grid.getYend()-i},getNameByIndex:function(e){var t=this.option.data[e];return"undefined"!=typeof t&&"undefined"!=typeof t.value?t.value:t},getIndexByName:function(e){for(var t=this.option.data,i=t.length,n=0;i>n;n++)if(t[n]==e||"undefined"!=typeof t[n].value&&t[n].value==e)return n;return-1},getValueFromCoord:function(){return""},isMainAxis:function(e){return e%this._interval===0}},s.inherits(t,i),e("../component").define("categoryAxis",t),t}),define("echarts/component/valueAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/date","zrender/tool/util","../util/smartSteps","../util/accMath","../component"],function(e){function t(e,t,n,a,o,r,s){if(!s||0===s.length)return void console.err("option.series.length == 0.");i.call(this,e,t,n,a,o),this.series=s,this.grid=this.component.grid;for(var l in r)this[l]=r[l];this.refresh(a,s)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config"),s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_AXIS_VALUE,_buildShape:function(){if(this._hasData=!1,this._calculateValue(),this._hasData&&this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width;if(this.isHorizontal())for(var l,h="bottom"===this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,d=0;i>d;d++)l=this.subPixelOptimize(this.getCoord(t[d]),s),e={_axisShape:"axisTick",zlevel:this._zlevelBase,hoverable:!1,style:{xStart:l,yStart:h,xEnd:l,yEnd:h+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e));else for(var m,c="left"===this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,d=0;i>d;d++)m=this.subPixelOptimize(this.getCoord(t[d]),s),e={_axisShape:"axisTick",zlevel:this._zlevelBase,hoverable:!1,style:{xStart:c,yStart:m,xEnd:c+o,yEnd:m,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e))},_buildAxisLabel:function(){var e,t=this._valueList,i=this._valueList.length,a=this.option.axisLabel.rotate,o=this.option.axisLabel.margin,r=this.option.axisLabel.clickable,s=this.option.axisLabel.textStyle;if(this.isHorizontal()){var l,h;"bottom"===this.option.position?(l=this.grid.getYend()+o,h="top"):(l=this.grid.getY()-o,h="bottom");for(var d=0;i>d;d++)e={zlevel:this._zlevelBase,hoverable:!1,style:{x:this.getCoord(t[d]),y:l,color:"function"==typeof s.color?s.color(t[d]):s.color,text:this._valueLabel[d],textFont:this.getFont(s),textAlign:s.align||"center",textBaseline:s.baseline||h}},a&&(e.style.textAlign=a>0?"bottom"===this.option.position?"right":"left":"bottom"===this.option.position?"left":"right",e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}else{var m,c;"left"===this.option.position?(m=this.grid.getX()-o,c="right"):(m=this.grid.getXend()+o,c="left");for(var d=0;i>d;d++)e={zlevel:this._zlevelBase,hoverable:!1,style:{x:m,y:this.getCoord(t[d]),color:"function"==typeof s.color?s.color(t[d]):s.color,text:this._valueLabel[d],textFont:this.getFont(s),textAlign:s.align||c,textBaseline:s.baseline||0===d&&""!==this.option.name?"bottom":d===i-1&&""!==this.option.name?"top":"middle"}},a&&(e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}},_buildSplitLine:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length;if(this.isHorizontal())for(var h,d=this.grid.getY(),m=this.grid.getYend(),c=0;i>c;c++)h=this.subPixelOptimize(this.getCoord(t[c]),r),e={zlevel:this._zlevelBase,hoverable:!1,style:{xStart:h,yStart:d,xEnd:h,yEnd:m,strokeColor:s[c%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e));else for(var p,u=this.grid.getX(),V=this.grid.getXend(),c=0;i>c;c++)p=this.subPixelOptimize(this.getCoord(t[c]),r),e={zlevel:this._zlevelBase,hoverable:!1,style:{xStart:u,yStart:p,xEnd:V,yEnd:p,strokeColor:s[c%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e))},_buildSplitArea:function(){var e,t=this.option.splitArea.areaStyle.color;if(t instanceof Array){var i=t.length,n=this._valueList,a=this._valueList.length;if(this.isHorizontal())for(var r,s=this.grid.getY(),l=this.grid.getHeight(),h=this.grid.getX(),d=0;a>=d;d++)r=a>d?this.getCoord(n[d]):this.grid.getXend(),e={zlevel:this._zlevelBase,hoverable:!1,style:{x:h,y:s,width:r-h,height:l,color:t[d%i]}},this.shapeList.push(new o(e)),h=r;else for(var m,c=this.grid.getX(),p=this.grid.getWidth(),u=this.grid.getYend(),d=0;a>=d;d++)m=a>d?this.getCoord(n[d]):this.grid.getY(),e={zlevel:this._zlevelBase,hoverable:!1,style:{x:c,y:m,width:p,height:u-m,color:t[d%i]}},this.shapeList.push(new o(e)),u=m}else e={zlevel:this._zlevelBase,hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:t}},this.shapeList.push(new o(e))},_calculateValue:function(){if(isNaN(this.option.min-0)||isNaN(this.option.max-0)){for(var e,t,i={},n=this.component.legend,a=0,o=this.series.length;o>a;a++)!(this.series[a].type!=r.CHART_TYPE_LINE&&this.series[a].type!=r.CHART_TYPE_BAR&&this.series[a].type!=r.CHART_TYPE_SCATTER&&this.series[a].type!=r.CHART_TYPE_K&&this.series[a].type!=r.CHART_TYPE_EVENTRIVER||n&&!n.isSelected(this.series[a].name)||(e=this.series[a].xAxisIndex||0,t=this.series[a].yAxisIndex||0,this.option.xAxisIndex!=e&&this.option.yAxisIndex!=t||!this._calculSum(i,a)));var s;for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)if(!isNaN(s[l])){this._hasData=!0,this._min=s[l],this._max=s[l];break}if(this._hasData)break}for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)isNaN(s[l])||(this._min=Math.min(this._min,s[l]),this._max=Math.max(this._max,s[l]))}var d=Math.abs(this._max-this._min);this._min=isNaN(this.option.min-0)?this._min-Math.abs(d*this.option.boundaryGap[0]):this.option.min-0,this._max=isNaN(this.option.max-0)?this._max+Math.abs(d*this.option.boundaryGap[1]):this.option.max-0,this._min===this._max&&(0===this._max?this._max=1:this._max>0?this._min=this._max/this.option.splitNumber!=null?this.option.splitNumber:5:this._max=this._max/this.option.splitNumber!=null?this.option.splitNumber:5),"time"!=this.option.type?this._reformValue(this.option.scale):this._reformTimeValue()}else this._hasData=!0,this._min=this.option.min-0,this._max=this.option.max-0,"time"!=this.option.type?this._customerValue():this._reformTimeValue()},_calculSum:function(e,t){var i,n,a=this.series[t].name||"kener";if(this.series[t].stack){var o="__Magic_Key_Positive__"+this.series[t].stack,l="__Magic_Key_Negative__"+this.series[t].stack;e[o]=e[o]||[],e[l]=e[l]||[],e[a]=e[a]||[],n=this.series[t].data;for(var h=0,d=n.length;d>h;h++)i=null!=n[h].value?n[h].value:n[h],"-"!==i&&(i-=0,i>=0?null!=e[o][h]?e[o][h]+=i:e[o][h]=i:null!=e[l][h]?e[l][h]+=i:e[l][h]=i,this.option.scale&&e[a].push(i))}else if(e[a]=e[a]||[],this.series[t].type!=r.CHART_TYPE_EVENTRIVER){n=this.series[t].data;for(var h=0,d=n.length;d>h;h++)i=null!=n[h].value?n[h].value:n[h],this.series[t].type===r.CHART_TYPE_K?(e[a].push(i[0]),e[a].push(i[1]),e[a].push(i[2]),e[a].push(i[3])):i instanceof Array?(-1!=this.option.xAxisIndex&&e[a].push("time"!=this.option.type?i[0]:s.getNewDate(i[0])),-1!=this.option.yAxisIndex&&e[a].push("time"!=this.option.type?i[1]:s.getNewDate(i[1]))):e[a].push(i)}else{n=this.series[t].eventList;for(var h=0,d=n.length;d>h;h++)for(var m=n[h].evolution,c=0,p=m.length;p>c;c++)e[a].push(s.getNewDate(m[c].time))}},_reformValue:function(t){var i=e("../util/smartSteps"),n=this.option.splitNumber;!t&&this._min>=0&&this._max>=0&&(this._min=0),!t&&this._min<=0&&this._max<=0&&(this._max=0);var a=i(this._min,this._max,n);n=null!=n?n:a.secs,this.option.splitNumber=n,this._min=a.min,this._max=a.max,this._valueList=a.pnts,this._reformLabelData()},_reformTimeValue:function(){var e=null!=this.option.splitNumber?this.option.splitNumber:5,t=s.getAutoFormatter(this._min,this._max,e),i=t.formatter,n=t.gapValue;this._valueList=[s.getNewDate(this._min)];var a;switch(i){case"week":a=s.nextMonday(this._min);break;case"month":a=s.nextNthOnMonth(this._min,1);break;case"quarter":a=s.nextNthOnQuarterYear(this._min,1);break;case"half-year":a=s.nextNthOnHalfYear(this._min,1);break;case"year":a=s.nextNthOnYear(this._min,1);break;default:72e5>=n?a=(Math.floor(this._min/n)+1)*n:(a=s.getNewDate(this._min- -n),a.setHours(6*Math.round(a.getHours()/6)),a.setMinutes(0),a.setSeconds(0))}for(a-this._min=0&&(("month"==i||"quarter"==i||"half-year"==i||"year"==i)&&t.setDate(1),!(this._max-t=a;a++)this._valueList.push(t.accAdd(this._min,t.accMul(n,a)));this._reformLabelData()},_reformLabelData:function(e){this._valueLabel=[];var t=this.option.axisLabel.formatter;if(t)for(var i=0,n=this._valueList.length;n>i;i++)"function"==typeof t?this._valueLabel.push(e?t.call(this.myChart,this._valueList[i],e):t.call(this.myChart,this._valueList[i])):"string"==typeof t&&this._valueLabel.push(e?s.format(t,this._valueList[i]):t.replace("{value}",this._valueList[i]));else if(e)for(var i=0,n=this._valueList.length;n>i;i++)this._valueLabel.push(s.format(e,this._valueList[i]));else for(var i=0,n=this._valueList.length;n>i;i++)this._valueLabel.push(this.numAddCommas(this._valueList[i]))},getExtremum:function(){return this._calculateValue(),{min:this._min,max:this._max}},refresh:function(e,t){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=l.merge(this.option.axisLabel.textStyle||{},this.ecTheme.textStyle),this.series=t),this.zr&&(this.clear(),this._buildShape())},getCoord:function(e){e=ethis._max?this._max:e;var t;return t=this.isHorizontal()?this.grid.getX()+(e-this._min)/(this._max-this._min)*this.grid.getWidth():this.grid.getYend()-(e-this._min)/(this._max-this._min)*this.grid.getHeight()},getCoordSize:function(e){return Math.abs(this.isHorizontal()?e/(this._max-this._min)*this.grid.getWidth():e/(this._max-this._min)*this.grid.getHeight())},getValueFromCoord:function(e){var t;return this.isHorizontal()?(e=ethis.grid.getXend()?this.grid.getXend():e,t=this._min+(e-this.grid.getX())/this.grid.getWidth()*(this._max-this._min)):(e=ethis.grid.getYend()?this.grid.getYend():e,t=this._max-(e-this.grid.getY())/this.grid.getHeight()*(this._max-this._min)),t.toFixed(2)-0},isMaindAxis:function(e){for(var t=0,i=this._valueList.length;i>t;t++)if(this._valueList[t]===e)return!0;return!1}},l.inherits(t,i),e("../component").define("valueAxis",t),t}),define("echarts/util/date",[],function(){function e(e,t,i){i=i>1?i:2;for(var n,a,o,r,s=0,l=d.length;l>s;s++)if(n=d[s].value,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,Math.round(a/n)<=1.2*i){o=d[s].formatter,r=d[s].value;break}return null==o&&(o="year",n=317088e5,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,r=Math.round(a/(i-1)/n)*n),{formatter:o,gapValue:r}}function t(e){return 10>e?"0"+e:e}function i(e,i){("week"==e||"month"==e||"quarter"==e||"half-year"==e||"year"==e)&&(e="MM - dd\nyyyy");var n=h(i),a=n.getFullYear(),o=n.getMonth()+1,r=n.getDate(),s=n.getHours(),l=n.getMinutes(),d=n.getSeconds();return e=e.replace("MM",t(o)),e=e.toLowerCase(),e=e.replace("yyyy",a),e=e.replace("yy",a%100),e=e.replace("dd",t(r)),e=e.replace("d",r),e=e.replace("hh",t(s)),e=e.replace("h",s),e=e.replace("mm",t(l)),e=e.replace("m",l),e=e.replace("ss",t(d)),e=e.replace("s",d)}function n(e){return e=h(e),e.setDate(e.getDate()+8-e.getDay()),e}function a(e,t,i){return e=h(e),e.setMonth(Math.ceil((e.getMonth()+1)/i)*i),e.setDate(t),e}function o(e,t){return a(e,t,1)}function r(e,t){return a(e,t,3)}function s(e,t){return a(e,t,6)}function l(e,t){return a(e,t,12)}function h(e){return e instanceof Date?e:new Date("string"==typeof e?e.replace(/-/g,"/"):e)}var d=[{formatter:"hh : mm : ss",value:1e3},{formatter:"hh : mm : ss",value:5e3},{formatter:"hh : mm : ss",value:1e4},{formatter:"hh : mm : ss",value:15e3},{formatter:"hh : mm : ss",value:3e4},{formatter:"hh : mm\nMM - dd",value:6e4},{formatter:"hh : mm\nMM - dd",value:3e5},{formatter:"hh : mm\nMM - dd",value:6e5},{formatter:"hh : mm\nMM - dd",value:9e5},{formatter:"hh : mm\nMM - dd",value:18e5},{formatter:"hh : mm\nMM - dd",value:36e5},{formatter:"hh : mm\nMM - dd",value:72e5},{formatter:"hh : mm\nMM - dd",value:216e5},{formatter:"hh : mm\nMM - dd",value:432e5},{formatter:"MM - dd\nyyyy",value:864e5},{formatter:"week",value:6048e5},{formatter:"month",value:26784e5},{formatter:"quarter",value:8208e6},{formatter:"half-year",value:16416e6},{formatter:"year",value:32832e6}];return{getAutoFormatter:e,getNewDate:h,format:i,nextMonday:n,nextNthPerNmonth:a,nextNthOnMonth:o,nextNthOnQuarterYear:r,nextNthOnHalfYear:s,nextNthOnYear:l}}),define("echarts/util/smartSteps",[],function(){function e(e){return W.log(K(e))/W.LN10}function t(e){return W.pow(10,e)}function i(e){return e===X(e)}function n(e,t,n,a){f=a||{},b=f.steps||L,_=f.secs||v,n=w(+n||0)%99,e=+e||0,t=+t||0,x=k=0,"min"in f&&(e=+f.min||0,x=1),"max"in f&&(t=+f.max||0,k=1),e>t&&(t=[e,e=t][0]);var o=t-e;if(x&&k)return g(e,t,n);if((n||5)>o){if(i(e)&&i(t))return p(e,t,n);if(0===o)return u(e,t,n)}return h(e,t,n)}function a(e,i,n,a){a=a||0;var s=o((i-e)/n,-1),l=o(e,-1,1),h=o(i,-1),d=W.min(s.e,l.e,h.e);r(s,{c:0,e:d}),r(l,s,1),r(h,s),a+=d,e=l.c,i=h.c;for(var m=(i-e)/n,c=t(a),p=0,u=[],V=n+1;V--;)u[V]=(e+m*V)*c;if(0>a){p=U(c),m=+(m*c).toFixed(p),e=+(e*c).toFixed(p),i=+(i*c).toFixed(p);for(var V=u.length;V--;)u[V]=u[V].toFixed(p),0===+u[V]&&(u[V]="0")}else e*=c,i*=c,m*=c;return _=0,b=0,f=0,{min:e,max:i,secs:n,step:m,fix:p,exp:a,pnts:u}}function o(n,a,o){a=w(a%10)||2,0>a&&(i(n)?a=(""+K(n)).replace(/0+$/,"").length||1:(n=n.toFixed(15).replace(/0+$/,""),a=n.replace(".","").replace(/^[-0]+/,"").length,n=+n));var r=X(e(n))-a+1,s=+(n*t(-r)).toFixed(15)||0;return s=o?X(s):I(s),!s&&(r=0),(""+K(s)).length>a&&(r+=1,s/=10),{c:s,e:r}}function r(e,i,n){var a=i.e-e.e;a&&(e.e+=a,e.c*=t(-a),e.c=n?X(e.c):I(e.c))}function s(e,t,i){e.et[n];)n++;if(!t[n])for(i/=10,e.e+=1,n=0;i>t[n];)n++;return e.c=t[n],e}function h(e,t,n){var s,h=n||+_.slice(-1),u=l((t-e)/h,b),U=o(t-e),g=o(e,-1,1),f=o(t,-1);if(r(U,u),r(g,u,1),r(f,u),n?s=m(g,f,h):h=d(g,f),i(e)&&i(t)&&e*t>=0){if(h>t-e)return p(e,t,h);h=c(e,t,n,g,f,h)}var L=V(e,t,g.c,f.c);return g.c=L[0],f.c=L[1],(x||k)&&y(e,t,g,f),a(g.c,f.c,h,f.e)}function d(e,i){for(var n,a,o,r,s=[],h=_.length;h--;)n=_[h],a=l((i.c-e.c)/n,b),a=a.c*t(a.e),o=X(e.c/a)*a,r=I(i.c/a)*a,s[h]={min:o,max:r,step:a,span:r-o};return s.sort(function(e,t){return e.span-t.span}),s=s[0],n=s.span/s.step,e.c=s.min,i.c=s.max,3>n?2*n:n}function m(e,i,n){for(var a,o,r=i.c,s=(i.c-e.c)/n-1;r>e.c;)s=l(s+1,b),s=s.c*t(s.e),a=s*n,o=I(i.c/s)*s,r=o-a;var h=e.c-r,d=o-i.c,m=h-d;return m>=2*s&&(m=X(m/s)*s,r+=m,o+=m),e.c=r,i.c=o,s}function c(e,n,a,o,r,s){var l=r.c-o.c,h=l/s*t(r.e);if(!i(h)&&(h=X(h),l=h*s,n-e>l&&(h+=1,l=h*s,!a&&h*(s-1)>=n-e&&(s-=1,l=h*s)),l>=n-e)){var d=l-(n-e);o.c=w(e-d/2),r.c=w(n+d/2),o.e=0,r.e=0}return s}function p(e,t,i){if(i=i||5,x)t=e+i;else if(k)e=t-i;else{var n=i-(t-e),o=w(e-n/2),r=w(t+n/2),s=V(e,t,o,r);e=s[0],t=s[1]}return a(e,t,i)}function u(e,t,i){i=i||5;var n=W.min(K(t/i),i)/2.1;return x?t=e+n:k?e=t-n:(e-=n,t+=n),h(e,t,i)}function V(e,t,i,n){return e>=0&&0>i?(n-=i,i=0):0>=t&&n>0&&(i-=n,n=0),[i,n]}function U(e){return e=(+e).toFixed(15).split("."),e.pop().replace(/0+$/,"").length}function y(e,t,i,n){if(x){var a=o(e,4,1);i.e-a.e>6&&(a={c:0,e:i.e}),s(i,a),s(n,a),n.c+=a.c-i.c,i.c=a.c}else if(k){var r=o(t,4);n.e-r.e>6&&(r={c:0,e:n.e}),s(i,r),s(n,r),i.c+=r.c-n.c,n.c=r.c}}function g(e,t,i){var n=i?[i]:_,s=t-e;if(0===s)return t=o(t,3),i=n[0],t.c=w(t.c+i/2),a(t.c-i,t.c,i,t.e);K(t/s)<1e-6&&(t=0),K(e/s)<1e-6&&(e=0);var l,h,d,m=[[5,10],[10,2],[50,10],[100,2]],c=[],p=[],u=o(t-e,3),V=o(e,-1,1),U=o(t,-1);r(V,u,1),r(U,u),s=U.c-V.c,u.c=s;for(var y=n.length;y--;){i=n[y],l=I(s/i),h=l*i-s,d=3*(h+3),d+=2*(i-n[0]+2),i%5===0&&(d-=10);for(var g=m.length;g--;)l%m[g][0]===0&&(d/=m[g][1]);p[y]=[i,l,h,d].join(),c[y]={secs:i,step:l,delta:h,score:d}}return c.sort(function(e,t){return e.score-t.score}),c=c[0],V.c=w(V.c-c.delta/2),U.c=w(U.c+c.delta/2),a(V.c,U.c,c.secs,u.e)}var f,b,_,x,k,L=[10,25,50],v=[4,5,6],W=Math,w=W.round,X=W.floor,I=W.ceil,K=W.abs;return n}); \ No newline at end of file diff --git a/dev/cosbench-controller-web/resources/cosbench.css b/dev/cosbench-controller-web/resources/cosbench.css index e7fac098..991c9130 100644 --- a/dev/cosbench-controller-web/resources/cosbench.css +++ b/dev/cosbench-controller-web/resources/cosbench.css @@ -45,6 +45,7 @@ a:visited { background: transparent url('bg-header.png') repeat-x left top; height: 65px; position: fixed; + z-index: 2; top: 0px; left: 0px; width: 100%; @@ -373,3 +374,17 @@ a:visited { { background-color: #18A9FF; } +/* --------------------------------------- + * chart Styles + * --------------------------------------- */ + \ No newline at end of file From 3fa02951786cd72340872d2f68105d07fb41ea49 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Thu, 5 Feb 2015 19:37:10 +0800 Subject: [PATCH 021/179] #5 update --- dev/cosbench-controller-web/resources/cosbench.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/dev/cosbench-controller-web/resources/cosbench.css b/dev/cosbench-controller-web/resources/cosbench.css index 991c9130..36d84898 100644 --- a/dev/cosbench-controller-web/resources/cosbench.css +++ b/dev/cosbench-controller-web/resources/cosbench.css @@ -377,7 +377,6 @@ a:visited { /* --------------------------------------- * chart Styles * --------------------------------------- */ - \ No newline at end of file From 8dbad089bf2aac556b2cc569b250637aa265f626 Mon Sep 17 00:00:00 2001 From: ywang19 Date: Tue, 10 Feb 2015 18:26:42 +0800 Subject: [PATCH 022/179] update version to 0.4.2 Signed-off-by: ywang19 --- VERSION | 2 +- dev/cosbench-ampli/META-INF/MANIFEST.MF | 2 +- dev/cosbench-api/META-INF/MANIFEST.MF | 2 +- dev/cosbench-castor/META-INF/MANIFEST.MF | 2 +- dev/cosbench-cdmi-base/META-INF/MANIFEST.MF | 2 +- dev/cosbench-cdmi-swift/META-INF/MANIFEST.MF | 2 +- dev/cosbench-cdmi-util/META-INF/MANIFEST.MF | 2 +- dev/cosbench-config/META-INF/MANIFEST.MF | 2 +- dev/cosbench-controller-web/META-INF/MANIFEST.MF | 2 +- dev/cosbench-controller-web/WEB-INF/freemarker/header.ftl | 2 +- dev/cosbench-controller/META-INF/MANIFEST.MF | 2 +- dev/cosbench-core-web/META-INF/MANIFEST.MF | 2 +- dev/cosbench-core/META-INF/MANIFEST.MF | 2 +- dev/cosbench-driver-web/META-INF/MANIFEST.MF | 2 +- dev/cosbench-driver-web/WEB-INF/freemarker/header.ftl | 2 +- dev/cosbench-driver/META-INF/MANIFEST.MF | 2 +- dev/cosbench-http/META-INF/MANIFEST.MF | 2 +- dev/cosbench-httpauth/META-INF/MANIFEST.MF | 2 +- dev/cosbench-keystone/META-INF/MANIFEST.MF | 2 +- dev/cosbench-librados/META-INF/MANIFEST.MF | 2 +- dev/cosbench-log/META-INF/MANIFEST.MF | 2 +- dev/cosbench-log4j/META-INF/MANIFEST.MF | 2 +- dev/cosbench-mock/META-INF/MANIFEST.MF | 2 +- dev/cosbench-s3/META-INF/MANIFEST.MF | 2 +- dev/cosbench-scality/META-INF/MANIFEST.MF | 2 +- dev/cosbench-swauth/META-INF/MANIFEST.MF | 2 +- dev/cosbench-swift/META-INF/MANIFEST.MF | 2 +- .../src/com/intel/cosbench/api/swift/SwiftStorage.java | 5 ++++- .../src/com/intel/cosbench/client/swift/SwiftClient.java | 5 ++++- .../src/com/intel/cosbench/client/swift/SwiftConstants.java | 5 +++++ dev/cosbench-tomcat/META-INF/MANIFEST.MF | 2 +- 31 files changed, 41 insertions(+), 30 deletions(-) diff --git a/VERSION b/VERSION index 985588d7..f7abe273 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.2 +0.4.2 \ No newline at end of file diff --git a/dev/cosbench-ampli/META-INF/MANIFEST.MF b/dev/cosbench-ampli/META-INF/MANIFEST.MF index b2010dc2..8e87b233 100644 --- a/dev/cosbench-ampli/META-INF/MANIFEST.MF +++ b/dev/cosbench-ampli/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Cosbench Ampli Client Bundle Bundle-SymbolicName: cosbench-ampli -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.context, diff --git a/dev/cosbench-api/META-INF/MANIFEST.MF b/dev/cosbench-api/META-INF/MANIFEST.MF index eb1091ba..31eba699 100644 --- a/dev/cosbench-api/META-INF/MANIFEST.MF +++ b/dev/cosbench-api/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench API Bundle Bundle-SymbolicName: cosbench-api -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.config, diff --git a/dev/cosbench-castor/META-INF/MANIFEST.MF b/dev/cosbench-castor/META-INF/MANIFEST.MF index d83dd54c..b781c42b 100644 --- a/dev/cosbench-castor/META-INF/MANIFEST.MF +++ b/dev/cosbench-castor/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Castor Configuration Bundle Bundle-SymbolicName: cosbench-castor -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Fragment-Host: com.springsource.org.castor;bundle-version="[1.2.0,2.0.0)" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 diff --git a/dev/cosbench-cdmi-base/META-INF/MANIFEST.MF b/dev/cosbench-cdmi-base/META-INF/MANIFEST.MF index 51462c07..417f2418 100644 --- a/dev/cosbench-cdmi-base/META-INF/MANIFEST.MF +++ b/dev/cosbench-cdmi-base/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: CDMI Base Client Bundle Bundle-SymbolicName: cosbench-cdmi-base -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-cdmi-swift/META-INF/MANIFEST.MF b/dev/cosbench-cdmi-swift/META-INF/MANIFEST.MF index 209967d1..b77d03c9 100644 --- a/dev/cosbench-cdmi-swift/META-INF/MANIFEST.MF +++ b/dev/cosbench-cdmi-swift/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: CDMI Client for Swift Bundle Bundle-SymbolicName: cosbench-cdmi-swift -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-cdmi-util/META-INF/MANIFEST.MF b/dev/cosbench-cdmi-util/META-INF/MANIFEST.MF index f393fbb6..e73f55b1 100644 --- a/dev/cosbench-cdmi-util/META-INF/MANIFEST.MF +++ b/dev/cosbench-cdmi-util/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: CDMI Utility Bundle Bundle-SymbolicName: cosbench-cdmi-util -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: com.intel.cosbench.client.cdmi.util diff --git a/dev/cosbench-config/META-INF/MANIFEST.MF b/dev/cosbench-config/META-INF/MANIFEST.MF index 5fe60eb9..47dfd9d8 100644 --- a/dev/cosbench-config/META-INF/MANIFEST.MF +++ b/dev/cosbench-config/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Config Bundle Bundle-SymbolicName: cosbench-config -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: com.intel.cosbench.config, diff --git a/dev/cosbench-controller-web/META-INF/MANIFEST.MF b/dev/cosbench-controller-web/META-INF/MANIFEST.MF index d56a5b35..c127648d 100644 --- a/dev/cosbench-controller-web/META-INF/MANIFEST.MF +++ b/dev/cosbench-controller-web/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Web-ContextPath: controller Bundle-ManifestVersion: 2 Bundle-Name: COSBench Controller Web Bundle Bundle-SymbolicName: cosbench-controller-web -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.bench, diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/header.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/header.ftl index 2b9b4311..6a46c1da 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/header.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/header.ftl @@ -1,6 +1,6 @@ <#-- end of header --> diff --git a/dev/cosbench-controller/META-INF/MANIFEST.MF b/dev/cosbench-controller/META-INF/MANIFEST.MF index ace9fa08..5f7d6fcb 100644 --- a/dev/cosbench-controller/META-INF/MANIFEST.MF +++ b/dev/cosbench-controller/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Controller Bundler Bundle-SymbolicName: cosbench-controller -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.bench, diff --git a/dev/cosbench-core-web/META-INF/MANIFEST.MF b/dev/cosbench-core-web/META-INF/MANIFEST.MF index f4407b82..452802ad 100644 --- a/dev/cosbench-core-web/META-INF/MANIFEST.MF +++ b/dev/cosbench-core-web/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Web Core Bundle Bundle-SymbolicName: cosbench-core-web -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: com.intel.cosbench.web diff --git a/dev/cosbench-core/META-INF/MANIFEST.MF b/dev/cosbench-core/META-INF/MANIFEST.MF index 227c2a14..0f4aee3c 100644 --- a/dev/cosbench-core/META-INF/MANIFEST.MF +++ b/dev/cosbench-core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Core Bundle Bundle-SymbolicName: cosbench-core -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: com.intel.cosbench.bench, diff --git a/dev/cosbench-driver-web/META-INF/MANIFEST.MF b/dev/cosbench-driver-web/META-INF/MANIFEST.MF index b5d9dfbb..4aa6d4ac 100644 --- a/dev/cosbench-driver-web/META-INF/MANIFEST.MF +++ b/dev/cosbench-driver-web/META-INF/MANIFEST.MF @@ -3,7 +3,7 @@ Web-ContextPath: driver Bundle-ManifestVersion: 2 Bundle-Name: COSBench Driver Web Bundle Bundle-SymbolicName: cosbench-driver-web -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.bench, diff --git a/dev/cosbench-driver-web/WEB-INF/freemarker/header.ftl b/dev/cosbench-driver-web/WEB-INF/freemarker/header.ftl index be7c2908..66f37da1 100644 --- a/dev/cosbench-driver-web/WEB-INF/freemarker/header.ftl +++ b/dev/cosbench-driver-web/WEB-INF/freemarker/header.ftl @@ -1,6 +1,6 @@ <#-- end of header --> diff --git a/dev/cosbench-driver/META-INF/MANIFEST.MF b/dev/cosbench-driver/META-INF/MANIFEST.MF index 9cd80104..5192cce7 100644 --- a/dev/cosbench-driver/META-INF/MANIFEST.MF +++ b/dev/cosbench-driver/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Driver Bundle Bundle-SymbolicName: cosbench-driver -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-http/META-INF/MANIFEST.MF b/dev/cosbench-http/META-INF/MANIFEST.MF index 057d2f7b..f0910462 100644 --- a/dev/cosbench-http/META-INF/MANIFEST.MF +++ b/dev/cosbench-http/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Http Client Utility Bundle Bundle-SymbolicName: cosbench-http -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Export-Package: com.intel.cosbench.client.http diff --git a/dev/cosbench-httpauth/META-INF/MANIFEST.MF b/dev/cosbench-httpauth/META-INF/MANIFEST.MF index 8cac2177..a7b4a91c 100644 --- a/dev/cosbench-httpauth/META-INF/MANIFEST.MF +++ b/dev/cosbench-httpauth/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Http Authentication Bundle Bundle-SymbolicName: cosbench-httpauth -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-keystone/META-INF/MANIFEST.MF b/dev/cosbench-keystone/META-INF/MANIFEST.MF index 784d2b8f..e91744ef 100644 --- a/dev/cosbench-keystone/META-INF/MANIFEST.MF +++ b/dev/cosbench-keystone/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Keystone Client Bundle Bundle-SymbolicName: cosbench-keystone -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-librados/META-INF/MANIFEST.MF b/dev/cosbench-librados/META-INF/MANIFEST.MF index d830a306..bbbe26e5 100644 --- a/dev/cosbench-librados/META-INF/MANIFEST.MF +++ b/dev/cosbench-librados/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Librados Storage Client Bundle Bundle-SymbolicName: cosbench-librados -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ClassPath: ., diff --git a/dev/cosbench-log/META-INF/MANIFEST.MF b/dev/cosbench-log/META-INF/MANIFEST.MF index ca2512c1..483b804f 100644 --- a/dev/cosbench-log/META-INF/MANIFEST.MF +++ b/dev/cosbench-log/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Log Bundle Bundle-SymbolicName: cosbench-log -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Activator: com.intel.cosbench.log.osgi.Activator Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 diff --git a/dev/cosbench-log4j/META-INF/MANIFEST.MF b/dev/cosbench-log4j/META-INF/MANIFEST.MF index d889c885..5cb6d4fc 100644 --- a/dev/cosbench-log4j/META-INF/MANIFEST.MF +++ b/dev/cosbench-log4j/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Log4j Configuration Bundle Bundle-SymbolicName: cosbench-log4j -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Fragment-Host: com.springsource.org.apache.log4j;bundle-version="[1.0.0,2.0.0)" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 diff --git a/dev/cosbench-mock/META-INF/MANIFEST.MF b/dev/cosbench-mock/META-INF/MANIFEST.MF index 8598971e..a8b0066b 100644 --- a/dev/cosbench-mock/META-INF/MANIFEST.MF +++ b/dev/cosbench-mock/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Mock Client Bundle Bundle-SymbolicName: cosbench-mock -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-s3/META-INF/MANIFEST.MF b/dev/cosbench-s3/META-INF/MANIFEST.MF index 5aa9c0ad..dcb748aa 100644 --- a/dev/cosbench-s3/META-INF/MANIFEST.MF +++ b/dev/cosbench-s3/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: S3 Storage Client Bundle Bundle-SymbolicName: cosbench-s3 -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ClassPath: ., diff --git a/dev/cosbench-scality/META-INF/MANIFEST.MF b/dev/cosbench-scality/META-INF/MANIFEST.MF index 1fadd176..be41973a 100644 --- a/dev/cosbench-scality/META-INF/MANIFEST.MF +++ b/dev/cosbench-scality/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Scality COSBench Client Bundle Bundle-SymbolicName: cosbench-scality -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: Scality Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-swauth/META-INF/MANIFEST.MF b/dev/cosbench-swauth/META-INF/MANIFEST.MF index c4d87a33..3b32fabe 100644 --- a/dev/cosbench-swauth/META-INF/MANIFEST.MF +++ b/dev/cosbench-swauth/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Swauth Client Bundle Bundle-SymbolicName: cosbench-swauth -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-swift/META-INF/MANIFEST.MF b/dev/cosbench-swift/META-INF/MANIFEST.MF index 815d0057..8eced52a 100644 --- a/dev/cosbench-swift/META-INF/MANIFEST.MF +++ b/dev/cosbench-swift/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Swift Client Bundle Bundle-SymbolicName: cosbench-swift -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Vendor: intel Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: com.intel.cosbench.api.auth, diff --git a/dev/cosbench-swift/src/com/intel/cosbench/api/swift/SwiftStorage.java b/dev/cosbench-swift/src/com/intel/cosbench/api/swift/SwiftStorage.java index 93f80c45..9b5144d4 100644 --- a/dev/cosbench-swift/src/com/intel/cosbench/api/swift/SwiftStorage.java +++ b/dev/cosbench-swift/src/com/intel/cosbench/api/swift/SwiftStorage.java @@ -49,6 +49,7 @@ class SwiftStorage extends NoneStorage { private String token; private String storage_url; private String policy; + private int transfer_rate; public SwiftStorage() { /* empty */ @@ -62,11 +63,13 @@ public void init(Config config, Logger logger) { token = config.get(AUTH_TOKEN_KEY, AUTH_TOKEN_DEFAULT); storage_url = config.get(STORAGE_URL_KEY, STORAGE_URL_DEFAULT); policy = config.get(POLICY_KEY, POLICY_DEFAULT); + transfer_rate = config.getInt(TRANSFER_RATE, TRANSFER_RATE_DEFAULT); parms.put(CONN_TIMEOUT_KEY, timeout); parms.put(AUTH_TOKEN_KEY, token); parms.put(STORAGE_URL_KEY, storage_url); parms.put(POLICY_KEY, policy); + parms.put(TRANSFER_RATE, transfer_rate); logger.debug("using storage config: {}", parms); @@ -86,7 +89,7 @@ public void setAuthContext(AuthContext info) { } try { - client.init(token, storage_url, policy); + client.init(token, storage_url, policy, transfer_rate); } catch (Exception e) { throw new StorageException(e); } diff --git a/dev/cosbench-swift/src/com/intel/cosbench/client/swift/SwiftClient.java b/dev/cosbench-swift/src/com/intel/cosbench/client/swift/SwiftClient.java index 02ec1c7a..58237969 100644 --- a/dev/cosbench-swift/src/com/intel/cosbench/client/swift/SwiftClient.java +++ b/dev/cosbench-swift/src/com/intel/cosbench/client/swift/SwiftClient.java @@ -38,6 +38,7 @@ public class SwiftClient { private String authToken; private String storageURL; private String policy; + private int rate; /* HTTP client */ private HttpClient client; @@ -68,10 +69,11 @@ public void abort() { method = null; } - public void init(String authToken, String storageURL, String policy) { + public void init(String authToken, String storageURL, String policy, int rate) { this.authToken = authToken; this.storageURL = storageURL; this.policy = policy; + this.rate = rate; } public SwiftAccount getAccountInfo() throws IOException, SwiftException { @@ -174,6 +176,7 @@ public InputStream getObjectAsStream(String container, String object) throws IOException, SwiftException { method = HttpClientUtil.makeHttpGet(getObjectPath(container, object)); method.setHeader(X_AUTH_TOKEN, authToken); + method.setHeader(X_TRANSFER_RATE, new Integer(rate).toString()); SwiftResponse response = new SwiftResponse(client.execute(method)); if (response.getStatusCode() == SC_OK) return response.getResponseBodyAsStream(); diff --git a/dev/cosbench-swift/src/com/intel/cosbench/client/swift/SwiftConstants.java b/dev/cosbench-swift/src/com/intel/cosbench/client/swift/SwiftConstants.java index 648d954f..cd4a9880 100644 --- a/dev/cosbench-swift/src/com/intel/cosbench/client/swift/SwiftConstants.java +++ b/dev/cosbench-swift/src/com/intel/cosbench/client/swift/SwiftConstants.java @@ -40,6 +40,9 @@ public interface SwiftConstants { String POLICY_KEY = "policy"; String POLICY_DEFAULT = null; + String TRANSFER_RATE = "transfer_rate"; + Integer TRANSFER_RATE_DEFAULT = 50000000; + // -------------------------------------------------------------------------- // Swift RESTful API // -------------------------------------------------------------------------- @@ -57,5 +60,7 @@ public interface SwiftConstants { String X_ACCOUNT_CONTAINER_COUNT = "X-Account-Container-Count"; String X_ACCOUNT_BYTES_USED = "X-Account-Bytes-Used"; + + String X_TRANSFER_RATE = "X-Transfer-Rate"; } diff --git a/dev/cosbench-tomcat/META-INF/MANIFEST.MF b/dev/cosbench-tomcat/META-INF/MANIFEST.MF index 41da3411..cb40c4a9 100644 --- a/dev/cosbench-tomcat/META-INF/MANIFEST.MF +++ b/dev/cosbench-tomcat/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: COSBench Tomcat Bundle Bundle-SymbolicName: cosbench-tomcat -Bundle-Version: 0.4.1.0 +Bundle-Version: 0.4.2.0 Bundle-Activator: com.intel.cosbench.tomcat.osgi.Activator Import-Package: com.intel.cosbench.log, org.apache.catalina;version="[6.0.16,7.0.0)", From a0f6f9a4259406fc9f98a6c73056ffb819ef67cc Mon Sep 17 00:00:00 2001 From: ywang19 Date: Tue, 10 Feb 2015 19:03:49 +0800 Subject: [PATCH 023/179] fix start/stop script issues Signed-off-by: ywang19 --- release/start-all.sh | 4 ++-- release/stop-all.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/release/start-all.sh b/release/start-all.sh index 1a505c84..2c853240 100644 --- a/release/start-all.sh +++ b/release/start-all.sh @@ -15,8 +15,8 @@ #limitations under the License. # -sh start-driver.sh +bash start-driver.sh echo echo "======================================================" echo -sh start-controller.sh +bash start-controller.sh diff --git a/release/stop-all.sh b/release/stop-all.sh index 43e36d39..aa0e9a22 100644 --- a/release/stop-all.sh +++ b/release/stop-all.sh @@ -15,8 +15,8 @@ #limitations under the License. # -sh stop-controller.sh +bash stop-controller.sh echo echo "======================================================" echo -sh stop-driver.sh \ No newline at end of file +bash stop-driver.sh \ No newline at end of file From 5e3f9893142e91a30ff00b214d4af34a1baf2473 Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Fri, 13 Feb 2015 15:07:33 +0800 Subject: [PATCH 024/179] new real-time performance graph #5 --- .../WEB-INF/freemarker/finalchart.ftl | 119 ++++++++++---- .../WEB-INF/freemarker/forchart.ftl | 51 +++--- .../WEB-INF/freemarker/runningchart.ftl | 154 ++++++++++++------ .../WEB-INF/freemarker/workload.ftl | 66 ++++---- 4 files changed, 260 insertions(+), 130 deletions(-) diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/finalchart.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/finalchart.ftl index cbbb79b5..bf4d3d72 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/finalchart.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/finalchart.ftl @@ -11,57 +11,118 @@ var id="${sInfo.id}"; if(id==d){ var i=0; - //bandwidth - var ybandwidth=new Array(); var xvalue=new Array(); - var bandwidthname="bandwidth"; - var bandwidthsp="KB/S"; - var bandwidth=""; + var yvalue = new Array(); + var axis=new Array(); + + //bandwidth + var ybandread=new Array(); + var ybandwrite=new Array(); + var ybanddelete=new Array(); + var bandwidth; + //throughput - var ythroughput=new Array(); - var throughputname="throughput"; - var throughputsp="op/s"; - var throughput=""; + var ytputread=new Array(); + var ytputwrite=new Array(); + var ytputdelete=new Array(); + var sampletype; + var throughput; + //restime - var yRestime=new Array(); - var avgResTime=""; - var avgResTimename="resTime"; - var avgResTimesp="ms"; + var yrtimeread=new Array(); + var yrtimewrite=new Array(); + var yrtimedelete=new Array(); + var avgResTime; //ratio - var yratio=new Array(); - var rationame="ratio"; - var ratiosp="%"; - var ratio=""; + var yraread=new Array(); + var yrawrite=new Array(); + var yradelete=new Array(); + var ratio; <#list sInfo.snapshots as snapshot> <#list snapshot.report.allMetrics as mInfo> // bandwidth bandwidth="${mInfo.bandwidth}"; bandwidth=bandwidth.replace(/,/gi,''); - ybandwidth.push(Math.round(eval(bandwidth/1024))); - // throughput - throughput="${mInfo.throughput}"; - throughput=throughput.replace(/,/gi,''); - ythroughput.push(Math.round(eval(throughput))); + //resTime avgResTime="${mInfo.avgResTime}"; avgResTime=avgResTime.replace(/,/gi,''); - yRestime.push(Math.round(eval(avgResTime))); - + //Succ-Ratio ratio="${mInfo.ratio}"; ratio=ratio.replace(/,/gi,''); - yratio.push(Math.round(eval(ratio*100))); + + // throughput + sampletype="${mInfo.sampleType}"; + throughput="${mInfo.throughput}"; + throughput=throughput.replace(/,/gi,''); + if(sampletype=="read"){ + ytputread.push(Math.round(eval(throughput))); + ybandread.push(Math.round(eval(bandwidth/1024))); + yrtimeread.push(Math.round(eval(avgResTime))); + yraread.push(Math.round(eval(ratio*100))); + }else if(sampletype=="write"){ + ytputwrite.push(Math.round(eval(throughput))); + ybandwrite.push(Math.round(eval(bandwidth/1024))); + yrtimewrite.push(Math.round(eval(avgResTime))); + yrawrite.push(Math.round(eval(ratio*100))); + }else if(sampletype=="delete"){ + ytputdelete.push(Math.round(eval(throughput))); + ybanddelete.push(Math.round(eval(bandwidth/1024))); + yrtimedelete.push(Math.round(eval(avgResTime))); + yradelete.push(Math.round(eval(ratio*100))); + } //xvalue xvalue.push(i); i++; - forchart(xvalue,ybandwidth,bandwidthname,bandwidthsp,id); - forchart(xvalue,ythroughput,throughputname,throughputsp,id); - forchart(xvalue,yRestime,avgResTimename,avgResTimesp,id); - forchart(xvalue,yratio,rationame,ratiosp,id); + //restime + yvalue.length=0; + if(yrtimeread.length>0){ + yvalue.push(yrtimeread); + axis.push("read"); + }if(yrtimewrite.length>0){ + yvalue.push(yrtimewrite); + axis.push("write"); + }if(yrtimedelete.length>0){ + yvalue.push(yrtimedelete); + axis.push("delete"); + } + xvalue.length=yvalue[0].length; + forchart(xvalue,yvalue,"resTime","sp",id,axis); + //ratio + yvalue.length=0; + if(yraread.length>0){ + yvalue.push(yraread); + }if(yrawrite.length>0){ + yvalue.push(yrawrite); + }if(yradelete.length>0){ + yvalue.push(yradelete); + } + forchart(xvalue,yvalue,"ratio","%",id,axis); + //bandwith + yvalue.length=0; + if(ybandread.length>0){ + yvalue.push(ybandread); + }if(ybandwrite.length>0){ + yvalue.push(ybandwrite); + }if(ybanddelete.length>0){ + yvalue.push(ybanddelete); + } + forchart(xvalue,yvalue,"bandwidth","KB/S",id,axis); + //throughput + yvalue.length=0; + if(ytputread.length>0){ + yvalue.push(ytputread); + }if(ytputwrite.length>0){ + yvalue.push(ytputwrite); + }if(ytputdelete.length>0){ + yvalue.push(ytputdelete); + } + forchart(xvalue,yvalue,"throughput","op/s",id,axis); } } diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/forchart.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/forchart.ftl index 0f8be46c..4c78fd1a 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/forchart.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/forchart.ftl @@ -1,6 +1,30 @@ \ No newline at end of file diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl index 95c6cc61..9e9c1fae 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl @@ -90,24 +90,6 @@

Final Result

<#assign allMetrics = info.report.allMetrics > <#include "metrics.ftl"> -

Performance Graph - -

- <#if perfDetails >

hide peformance details

<#else> @@ -118,17 +100,6 @@ <#assign snapshot = info.snapshot > <#assign allMetrics = snapshot.report.allMetrics > <#include "metrics.ftl"> -

Performance Graph

-
-
-
-
-
-
- <#include "forchart.ftl"> - <#include "runningchart.ftl"> - -

The snapshot was taken at ${snapshot.timestamp?time} with version ${snapshot.version}.

Stages

@@ -233,6 +204,22 @@ + + +<#if isRunning> +

Performance Graph

+
+
+
+
+
+
+ <#include "forchart.ftl"> + <#include "runningchart.ftl"> + +
+ +

There are ${info.stageCount} stages in this workload.

<#if isStopped> <#if showErrorStatistics> @@ -261,7 +248,28 @@ <#else>

show error statistics details

+ +

Performance Graph + +

+ + +

Actions

<#if !isStopped > From c42bd9a5003029a391875999bd1cdf99059ca340 Mon Sep 17 00:00:00 2001 From: ywang19 Date: Wed, 25 Feb 2015 16:32:54 +0800 Subject: [PATCH 025/179] fix issue #250: hard to distinguish different operations under the same work item from UI Signed-off-by: ywang19 --- dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl | 2 +- .../intel/cosbench/controller/service/WorkloadProcessor.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl index 3c66caff..3aa643d8 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/metrics.ftl @@ -12,7 +12,7 @@ <#list allMetrics as mInfo> - ${mInfo.opName}<#if mInfo.opName != mInfo.sampleType>-${mInfo.sampleType} + ${mInfo.opId}:${mInfo.opName}<#if mInfo.opName != mInfo.sampleType>-${mInfo.sampleType} <#assign op = mInfo.sampleCount > <#if (op >= 1000) > diff --git a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/WorkloadProcessor.java b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/WorkloadProcessor.java index 99519a55..720efe09 100644 --- a/dev/cosbench-controller/src/com/intel/cosbench/controller/service/WorkloadProcessor.java +++ b/dev/cosbench-controller/src/com/intel/cosbench/controller/service/WorkloadProcessor.java @@ -23,6 +23,8 @@ import java.util.*; import java.util.concurrent.*; +import org.apache.commons.lang.StringUtils; + import com.intel.cosbench.config.*; import com.intel.cosbench.config.castor.CastorConfigTools; import com.intel.cosbench.controller.model.*; @@ -106,7 +108,8 @@ private static void initStageOpId(Stage stage) { int index = 0; for (Work work : stage.getWorks()) { for (Operation op : work.getOperations()) - op.setId("op" + String.valueOf(++index)); + if("none".equals(op.getId())) + op.setId("op" + String.valueOf(++index)); } } From 29138d735b134910794ba867f44bb741b5e597c0 Mon Sep 17 00:00:00 2001 From: ywang19 Date: Wed, 4 Mar 2015 21:57:12 +0800 Subject: [PATCH 026/179] fix #252: too many open files Signed-off-by: ywang19 --- .../cosbench/driver/operator/FileWriter.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/FileWriter.java b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/FileWriter.java index dedc41d8..e464a0cc 100644 --- a/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/FileWriter.java +++ b/dev/cosbench-driver/src/com/intel/cosbench/driver/operator/FileWriter.java @@ -18,6 +18,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.IOException; import java.io.InputStream; import java.security.NoSuchAlgorithmException; import java.util.Arrays; @@ -94,11 +95,12 @@ protected void operate(int idx, int all, Session session) { // as we index arrays starting from 0, we need to remove 1 here Integer rand = (filePicker.pickObjKey(random) - 1); String filename = null; - + + InputStream fis = null; + filename = listOfFiles[rand].getName(); + long length = listOfFiles[rand].length(); + try { - filename = listOfFiles[rand].getName(); - long length = listOfFiles[rand].length(); - InputStream fis = null; if (hashCheck) { HashUtil util = new HashUtil(); int hashLen = util.getHashLen(); @@ -122,6 +124,14 @@ protected void operate(int idx, int all, Session session) { "failed to perform file Write operation, hash Algorithm MD5 not supported, deaktivate hashCheck, maybe?", e); sample = new Sample(new Date(), getId(), getOpType(), getSampleType(), getName(), false); + }finally { + if(fis != null) { + try { + fis.close(); + } catch (IOException e) { + doLogErr(session.getLogger(), "failed to close file " + filename, e); + } + } } session.getListener().onSampleCreated(sample); From 23a22ce6293a5942c31263f290be081b232c8654 Mon Sep 17 00:00:00 2001 From: xiaoerlyl Date: Thu, 5 Mar 2015 10:30:52 +0800 Subject: [PATCH 027/179] for keystone auth, add region parameter to specify the target region --- .../cosbench/api/keystone/KeystoneAuth.java | 12 ++++++++++-- .../client/keystone/KeystoneClient.java | 17 +++++++++++++---- .../client/keystone/KeystoneConstants.java | 3 +++ .../client/keystone/KeystoneResponse.java | 11 +++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/dev/cosbench-keystone/src/com/intel/cosbench/api/keystone/KeystoneAuth.java b/dev/cosbench-keystone/src/com/intel/cosbench/api/keystone/KeystoneAuth.java index f4b2c801..bcb648e7 100644 --- a/dev/cosbench-keystone/src/com/intel/cosbench/api/keystone/KeystoneAuth.java +++ b/dev/cosbench-keystone/src/com/intel/cosbench/api/keystone/KeystoneAuth.java @@ -48,12 +48,17 @@ class KeystoneAuth extends NoneAuth { /* tenant info */ private String tenantId; private String tenantName; + + /*keystone region*/ + private String region; /* service info */ private String service; /* connection setting */ private int timeout; + + Logger logger = null; public KeystoneAuth() { /* empty */ @@ -62,7 +67,7 @@ public KeystoneAuth() { @Override public void init(Config config, Logger logger) { super.init(config, logger); - + this.logger = logger; url = config.get(AUTH_URL_KEY, config.get(AUTH_URL_ALTKEY, URL_DEFAULT)); username = config.get(AUTH_USERNAME_KEY, AUTH_USERNAME_DEFAULT); password = config.get(AUTH_PASSWORD_KEY, AUTH_PASSWORD_DEFAULT); @@ -71,6 +76,7 @@ public void init(Config config, Logger logger) { tenantName = config.get(AUTH_TENANT_NAME_KEY, config.get(AUTH_TENANT_NAME_ALTKEY, AUTH_TENANT_NAME_DEFAULT)); service = config.get(AUTH_SERVICE_KEY, AUTH_SERVICE_DEFAULT); timeout = config.getInt(CONN_TIMEOUT_KEY, CONN_TIMEOUT_DEFAULT); + region = config.get(AUTH_REGION_KEY, AUTH_REGION_DEFAULT); parms.put(AUTH_URL_KEY, url); parms.put(AUTH_USERNAME_KEY, username); @@ -80,6 +86,8 @@ public void init(Config config, Logger logger) { parms.put(AUTH_TENANT_NAME_KEY, tenantName); parms.put(AUTH_SERVICE_KEY, service); parms.put(CONN_TIMEOUT_KEY, timeout); + parms.put(AUTH_REGION_KEY, AUTH_REGION_DEFAULT); + logger.debug("using auth config: {}", parms); @@ -117,7 +125,7 @@ private AuthContext createContext() { // context.put(AUTH_TOKEN_KEY, client.getKeystoneTokenId()); // context.put(STORAGE_URL_KEY, client.getServiceUrl(service)); // return context; - KeystoneAuthContext context = new KeystoneAuthContext(url, username, password, service, client.getKeystoneTokenId(), client.getServiceUrl(service)); + KeystoneAuthContext context = new KeystoneAuthContext(url, username, password, service, client.getKeystoneTokenId(), client.getServiceUrl(service,region)); return context; } diff --git a/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneClient.java b/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneClient.java index a7435227..a1fdcb28 100644 --- a/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneClient.java +++ b/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneClient.java @@ -27,6 +27,7 @@ import com.intel.cosbench.client.keystone.KeystoneResponse.AccessInfo.Token; import com.intel.cosbench.client.keystone.KeystoneResponse.AccessInfo.User; import com.intel.cosbench.client.keystone.handler.*; +import com.intel.cosbench.log.Logger; /** * A client for Openstack keystone authentication service.
@@ -62,11 +63,13 @@ public class KeystoneClient { private String username; private String password; private String userToken; - + /* tenant info */ private String tenantId; private String tenantName; - + + /*targe region*/ + private String region; /* authentication handler */ private AuthHandler handler; @@ -287,13 +290,19 @@ public String getKeystoneTokenId() { * - the name identifying the service * @return the public URL of a cloud service */ - public String getServiceUrl(String serviceName) { + public String getServiceUrl(String serviceName, String region) { ServiceInfo service = getServiceInfo(serviceName); if (service == null) return null; List endpoints = service.getEndpoints(); if (endpoints != null && endpoints.size() > 0) - return endpoints.get(0).getPublicURL(); + { + for (Endpoint endpoint : endpoints) { + if(endpoint.getRegion() != null && endpoint.getRegion().equals(region)){ + return endpoint.getPublicURL(); + } + } + } return null; } diff --git a/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneConstants.java b/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneConstants.java index 16c37a5a..44e0632c 100644 --- a/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneConstants.java +++ b/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneConstants.java @@ -59,4 +59,7 @@ public interface KeystoneConstants { String AUTH_SERVICE_KEY = "service"; String AUTH_SERVICE_DEFAULT = "swift"; + + String AUTH_REGION_KEY = "region"; + String AUTH_REGION_DEFAULT = "regionOne"; } diff --git a/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneResponse.java b/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneResponse.java index ef284aa7..958a85db 100644 --- a/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneResponse.java +++ b/dev/cosbench-keystone/src/com/intel/cosbench/client/keystone/KeystoneResponse.java @@ -192,6 +192,7 @@ public static class Endpoint { private String adminURL; private String internalURL; private String publicURL; + private String region; public String getAdminURL() { return adminURL; @@ -217,6 +218,16 @@ public void setPublicURL(String publicURL) { this.publicURL = publicURL; } + public String getRegion() { + return region; + } + + public void setRegion(String region) { + this.region = region; + } + + + } } From 852dab5640daed2061f476f26128103732bad4da Mon Sep 17 00:00:00 2001 From: ywang19 Date: Fri, 6 Mar 2015 13:18:06 +0800 Subject: [PATCH 028/179] add initial travisCI Signed-off-by: ywang19 --- .travis.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..16f9e8a5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +language: java +java: + - openjdk6 + - oraclejdk6 + - openjdk7 + - oraclejdk7 + +install: PLEASE CHANGE ME +script: PLEASE CHANGE ME From d875e87f460022011648ee5361be3dbd886f110d Mon Sep 17 00:00:00 2001 From: liyuanwa Date: Mon, 9 Mar 2015 14:19:18 +0800 Subject: [PATCH 029/179] change performance graph style --- .../WEB-INF/freemarker/workload.ftl | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl b/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl index 9e9c1fae..2c57e4df 100644 --- a/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl +++ b/dev/cosbench-controller-web/WEB-INF/freemarker/workload.ftl @@ -209,11 +209,11 @@ <#if isRunning>

Performance Graph

-
-
-
-
-
+
+
+
+
+
<#include "forchart.ftl"> <#include "runningchart.ftl"> @@ -258,11 +258,11 @@