`
laserdance
  • 浏览: 90509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

日志统计平台2

阅读更多
ImportTask里面我们就实现了ftp下载日志文件,然后批量导入数据库,其实该task是一个线程的实现类,
public class ImportTask implements Runnable {
	final static Logger logger = LoggerFactory.getLogger(ImportTask.class);	
         private Element taskEle;
	private String taskName;
	/**
	 * Construct for ImportTask.java.
	 */
	public ImportTask(Element ele ) {
		this.taskEle = ele;
		this.taskName = taskEle.getAttribute("name");
	}
	
	protected void doTask(Date preDate) {
		try {
			//批量导数据
			BatchImport2DB bidb = new BatchImport2DB();
//设置数据源,连接数据库			
bidb.setDataSource( GloalDataUtil.getDataSource());
			bidb.init(taskEle);
			//下载日志文件
			DownloadFileLog dflog = new DownloadFileLog();//初始化下载日志的一些参数
			dflog.init(taskEle);
			long logStart = System.currentTimeMillis();
//返加根据日期下载的日志文件名列表,downloadlogfile就是apache的软件实现的ftp下载			
String[] arrFileName = dflog.downloadLogFile(preDate);
			long logEnd = System.currentTimeMillis();
			logger.info(taskName+"查询符合条件的日志共用时(ms)[ " + (logEnd - logStart) + " ]");
			for(String fileName: arrFileName){
				// 调用BatchImport2DB.class
				long batchStart = System.currentTimeMillis();
				ICSVReader csvReader = (ICSVReader) Class.forName(taskEle.getAttribute("csvReader")).newInstance();
				String csvpattern = taskEle.getAttribute("csvpattern");
//批导入
				if(csvReader.beginReader(fileName,csvpattern)) bidb.batchImport(csvReader);		
				long batchCost = (System.currentTimeMillis()- batchStart);
				logger.info("将[ " + fileName + " ]导入数据库共用时[ " + (batchCost) + " ]ms");
			}		
		} catch (Exception e) {
			logger.error(e.toString(),e);
		}
	}

	public void run() {
		//only use for test
//		doTask( new Date(1216098921590l - 24 * 60 *60 *1000L));
		//该任务是得到当前日期的前一天的日志.
		doTask( new Date(System.currentTimeMillis()- 24 * 60 *60 *1000L));
	}
}

该类就实现了sftp或ftp下载,然后再将这些文件导入数据库中,具体的是由csvreader来读取,然后则batchimport2db来导入数据库,读取就不在这写了不外是流读写,然后一行一行的读.
BatchImport2DB.java
public class BatchImport2DB {
	// 得到DB,连接数据库,操作sql
	private List<Field> fieldList = new ArrayList<Field>();
	private String sql;
	private static int BATCH_SIZE = 100;
	protected static final Logger logger = LoggerFactory
			.getLogger(BatchImport2DB.class);
	/**
	 * spring container invoke and the data source is setter IOC
	 */
	private JdbcTemplate jdbcTemplate;//spring最佳实践
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
	public void init(Element ele) {
		// 得到insertsql语句
		Element sqlEle = (Element) ele.getElementsByTagName("sql").item(0);
		sql = sqlEle.getAttribute("insert");
		BATCH_SIZE = Integer.parseInt(sqlEle.getAttribute("maxCommitNumber"));
		Element tabEle = (Element) XmlManager.querySingle("table", ele);
		NodeList nlc = tabEle.getElementsByTagName("column");
		for (int i = 0; i < nlc.getLength(); i++) {
			Element nmEle = (Element) nlc.item(i);
			// 将字段名称加入list表中
			String name = nmEle.getAttribute("name");
			String type = nmEle.getAttribute("type");
			int csvindex = Integer.parseInt(nmEle.getAttribute("csvindex"));
			String format = nmEle.getAttribute("format");
			fieldList.add(new Field(name, type, csvindex, format));
		}
	}
	/**
	 * Method for batchImport 用spring jdbcTemplate来插入sql.
	 * 
	 * @param csvReader
	 */
	public void batchImport(final ICSVReader csvReader) {
		// 得到sql clause
		InterruptibleBatchPreparedStatementSetter psset = new InterruptibleBatchPreparedStatementSetter() {
			public void setValues(PreparedStatement ps, int pos)
					throws SQLException {
				try {
					int leng = fieldList.size();
					String[] arrvalue = null;
					do {
						arrvalue = csvReader.readLine();
						if (!csvReader.lineIsNotNull()) {
							return;
						}

					} while (arrvalue.length < leng);
					// 处理结果数组
					for (int i = 0; i < leng; i++) {
						Field f = fieldList.get(i);
						if ("datetime".equals(f.type)) {
							ps.setTimestamp(i + 1, StringUtil.parse2Timestamp(
									arrvalue[f.csvindex], f.format));
						} else if ("int".equals(f.type)) {
							ps.setInt(i + 1, Integer
									.parseInt(arrvalue[f.csvindex]));
						} else if ("long".equals(f.type)) {
							ps.setLong(i + 1, Long
									.parseLong(arrvalue[f.csvindex]));
						} else if ("text".equals(f.type)) {
							ps.setString(i + 1, arrvalue[f.csvindex].substring(
									0, 1));
						} else {
							String content = arrvalue[f.csvindex];
							if (content.length() > 100) {
								content = content.substring(0, 99);
							}
							ps.setString(i + 1, content);
						}
					}
				} catch (SQLException ex) {
					logger.error(ex.toString(), ex);
					throw ex;
				} catch (Exception ex) {
					logger.error(ex.toString(), ex);
					throw new SQLException(ex.toString());
				}
			}
			public int getBatchSize() {
				return BATCH_SIZE;
			}
			 // 判断批处理是否完成.
			public boolean isBatchExhausted(int pos) {
				return !csvReader.lineIsNotNull();
			}
		};
		do {
			jdbcTemplate.batchUpdate(sql, psset);
		} while (csvReader.lineIsNotNull());
	}
	static class Field {
		String format;
		String name;
		String type;
		int csvindex;
		Field(String name, String type, int index, String format) {
			this.name = name;
			this.type = type;
			this.csvindex = index;
			this.format = format;
		}
	}
}



至此,所有的下载啊,导入啊全部完成.还未完成的就是SqlServer存储过程,以及web界面的图表显示.下面文章我们只讲jfreechart的图表显示.不讲Sqlserver存储过程.
分享到:
评论

相关推荐

    Webiase-日志分析工具 使用手册

    了,因此有可能比其他日志统计工具统计的数字要低,来自公司内部的访问也可以通过IP 过 滤设置过滤掉(暂不提供)。 · 可以生成超过30 个以上的各种图表,并付带有多个3 维统计图.,并且支持导出pdf、excel 等各 式...

    企业级电商网站的大数据统计分析平台源码+项目说明(以 Spark 框架为核心,对电商网站的日志进行离线和实时分析).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学...企业级电商网站的大数据统计分析平台源码+项目说明(以 Spark 框架为核心,对电商网站的日志进行离线和实时分析)...

    Python程序设计:python apache日志分析.pptx

    本次的任务是统计出apache访问日志中访问次数最高的ip地址并统计访问次数。 任务 python apache日志分析 任务知识点 Apache日志 Python apache日志分析注意的地方 知识点: Apache日志 Apache日志 Apache Apache是...

    loggrove日志实时查看、轮询、统计、监控工具

    Loggrove是对本地、远程日志文件进行 分页阅读、实时阅读、关键词匹配、统计、监控、钉钉告警、Highcharts图表展示 的 Web 平台服务,并包含 用户认证、LDAP认证、操作审计 等基础服务。

    【2019精品课】构建ELK海量日志分析平台

    本课程重点构建ELK海量日志分析平台,包括Filebeat多数据源采集、打标记、多行异常信息整合,Logstash数据解析、过滤、清洗,ElasticSearch对数据进行存储、搜索以及分析,Kibana实现大数据分析和数据可视化。...

    使用ELK搭建日志集中分析平台实践

    分析网站的访问情况时我们一般会借助Google/百度/CNZZ等方式嵌入JS做数据统计,但是当网站访问异常或者被攻击时我们需要在后台分析如Nginx的具体日志,而Nginx日志分割/GoAccess/Awstats都是相对简单的单节点解决...

    基于JAVA JSP+SQL网站流量统计管理系统的毕业设计,本网站界面比较美观、友好,兼容性较好、使用较方便,同时也是一个能提供

    基于JSP的网站流量统计系统在本人两个多月的努力下基本告一段落,本网站界面比较美观、友好,兼容性较好、使用较方便,同时也是一个能提供多样化功能的便捷平台。 在这几个月的时间里,自从零开始学习JSP语言,第一...

    基于分布式架构的煤矿企业日志数据分析设计与实现

    煤矿企业日志数据分析系统中,对数据的聚合统计,多数据源的数据关联是各种分析的基础操作。设计基于Hadoop的日志数据分析架构,并针对大数据关联准确率低的现象,将Bloom Filter算法与Map-Reduce处理架构融合。相比于...

    自定义统计SDKTcStatInterface.zip

    TcStatInterface是自定义统计SDK,完全放弃第三方平台,让app拥有自主的数据统计功能,支持页面统计 自定义事件统计 APP启动退出统计,不同渠道统计。客户端SDK功能概述在使用统计服务前,开发者先要拿到本身APPID。...

    Logstash日志管理系统 v6.8.12

    为您提供Logstash日志管理系统下载,Logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供Web接口用于查询和统计。Logstash现在是ElasticSearch家族...

    QPS接口耗时统计log_monitor.zip

    低侵入: 基于日志文件进行统计,无需修改原程序 使用说明 2.1 下载工具包 log_monitor.tar.gz,并解压 2.2 之后进行参数配置,可以拷贝现有的,各个参数说明如下: ...

    通过日志监控并收集Java应用程序性能数据

    Perf4j则是通过对自定义监控范围进行日志记录,再经统计分析生成所需性能数据,Perf4j提供了对常用日志工具的扩展以方便与产品集成,它产生的数据可用于生成可视化的性能图表。在实际部署的生产环境能够以较低的风险...

    Serlog(服务器日志分析软件)v14.0免费安装版

    Serlog是一款好用的服务器日志分析工具,软件回答了一些关键的营销问题, 还包括所有标准统计信息和报告,这些统计信息和报告是您希望从服务器日志分析器得到的:命中、会话、访问者、浏览器、平台、蜘蛛、带宽、...

    基于spark电商用户可视化行为分析项目源码,以 Spark 框架为核心, 对电商网站的日志进行离线和实时分析

    项目概述 本项目来源于企业级电商网站的大数据统计分析平台, 该平台以 Spark 框架为核心, 对电商网站的日志进行离线和实时分析。 该大数据分析平台对电商网站的各种用户行为( 访问行为、购物行为、广告点击行为等...

    懒猫短信发送平台

    5、系统统计功能,通道发送状况,通道图表统计,发送状态统计,用户组发送统计,用户发送统计,用户通道发送统计 6、系统日志,程序错误日志,短信发送服务日志 7、系统设置,菜单管理,平台菜单自定义管理设置,...

    webjoker简单的网站访客统计系统PHP版.rar

    webjoker网站访客统计系统运行于php mysql平台,加入统计代码后,可实现网站访问页面、... webjoker网站访问统计系统已经过了多次修正,功能在趋于不断的优化完美中,关于系统的更新日志,请参见压缩包内的官方说明。

    企业级电商网站的大数据统计分析平台完整源码+说明(以 Spark 框架为核心,对电商网站的日志进行离线和实时分析).zip

    2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也...

    ASPNET运维系统源码+知识库功能模块加6个统计报表模块

    角色管理 用户管理 日志管理 基础数据管理 文件管理 状态查看 修改密码 在线统计 角色用户管理 角色模块权限管理:可对页面和按钮的的权限同时进行控制 加油站基础数据维护 运维工作平台: 登记Case: Ajax自动提示 ...

    基于SQL-on-Hadoop的网络日志分析

    利用真实TB 级数据集对多种 Hadoop 列存储格式及压缩算法进行性能测试,并对比Hive和Impala引擎日志扫描及统计查询效率,选用Gzip压缩的Parquet格式可将日志体积压缩80%,且将Impala查询性能提升至5倍。基于该平台已...

    FR短信平台源码

    同时也具有充值、日志查询、计费管理等功能 3 终端用户功能 终端发送短信,同时可以查询发送短息历史数据。可以统计或者查询目前发送的费用情况 4 发送短信服务功能 无论是终端客户、代理商还是客户服务人员,...

Global site tag (gtag.js) - Google Analytics