将日志信息(系统性能参数)记录到MongoDB --- 2:写入记录

    到现在我们已经安装好了MongoDB,前面也得到了虚拟机的性能参数,现在我们要把这些参数写入DB。为了以后便于查询 ,我们需要把各个参数区分开来(之前是整个是一个字符串),而这一步可以在server端进行也可以在client端进行,为了减轻server的负担,还是选择在client端进行。为了方便server 端的插入,我们就在client端用hash_map存储分开后的信息,然后将hash_map传过来写入DB,注意对象在函数间传的是引用,所以用到clone()。

    还需要注意的是之前socket传递的是字符串,这里需要传递的是对象(hash_map)。

    在SystemMonitor里面加一个得到hash_map的函数:

@SuppressWarnings("unchecked")
	public static HashMap<String,String> getInfoHashMap() throws Exception{
		HashMap<String,String> info_map = new HashMap<String,String>();
		String total_info = getTotalInfo();

		info_map.put(InfoMapKey.TOTAL, total_info);
		info_map.put(InfoMapKey.IP, getIP());
		
		String[] lines = total_info.split("\n"); 
				
		//1
		int part_num = 0;
		int line_num = 0;
		String[] parts = lines[line_num++].split(",");
		String[] s = parts[part_num++].split("up");
		String[] s2 = s[0].split(" ");
		info_map.put(InfoMapKey.REPORT_TIME, s2[2]);
		if(s[1].contains("day"))
		{
			s2 = s[1].split("day");
			info_map.put(InfoMapKey.EXIST_TIME, s2[0].trim() + ":" + parts[part_num++].trim() );
		}		
		else
			info_map.put(InfoMapKey.EXIST_TIME, "0:" + s[1].trim());		
		s = parts[part_num++].split("u");
		info_map.put(InfoMapKey.USER_NUM, s[0].trim());
		s = parts[part_num++].split(":");
		info_map.put(InfoMapKey.LOAD_AVERAGE_1, s[1].trim());
		info_map.put(InfoMapKey.LOAD_AVERAGE_5, parts[part_num++].trim());
		info_map.put(InfoMapKey.LOAD_AVERAGE_15, parts[part_num++].trim());
		
		//2
		part_num = 0;
		parts = lines[line_num++].split(",");
		s = parts[part_num++].split("total");
		s2 = s[0].split(":");
		info_map.put(InfoMapKey.TASK_TOTAL, s2[1].trim());
		s = parts[part_num++].split("running");
		info_map.put(InfoMapKey.TASK_RUNNING, s[0].trim());
		s = parts[part_num++].split("sleeping");
		info_map.put(InfoMapKey.TASK_SLEEPING, s[0].trim());
		s = parts[part_num++].split("stopped");
		info_map.put(InfoMapKey.TASK_STOPPED, s[0].trim());
		s = parts[part_num++].split("zombie");
		info_map.put(InfoMapKey.TASK_ZOMBIE, s[0].trim());
		
		//3
		part_num = 0;
		parts = lines[line_num++].split(",");
		s = parts[part_num++].split("%");
		s2 = s[0].split(":");
		info_map.put(InfoMapKey.CPU_US, s2[1].trim());
		s = parts[part_num++].split("%");
		info_map.put(InfoMapKey.CPU_SY, s[0].trim());
		s = parts[part_num++].split("%");
		info_map.put(InfoMapKey.CPU_NI, s[0].trim());
		s = parts[part_num++].split("%");
		info_map.put(InfoMapKey.CPU_ID, s[0].trim());
		s = parts[part_num++].split("%");
		info_map.put(InfoMapKey.CPU_WA, s[0].trim());
		s = parts[part_num++].split("%");
		info_map.put(InfoMapKey.CPU_HI, s[0].trim());
		s = parts[part_num++].split("%");
		info_map.put(InfoMapKey.CPU_SI, s[0].trim());
		s = parts[part_num++].split("%");
		info_map.put(InfoMapKey.CPU_ST, s[0].trim());
		
		//4
		part_num = 0;
		parts = lines[line_num++].split(",");
		s = parts[part_num++].split(":");
		s2 = s[1].split("k");
		info_map.put(InfoMapKey.MEM_TOTAL, s2[0].trim());
		s = parts[part_num++].split("k");
		info_map.put(InfoMapKey.MEM_USED, s[0].trim());
		s = parts[part_num++].split("k");
		info_map.put(InfoMapKey.MEM_FREE, s[0].trim());
		s = parts[part_num++].split("k");
		info_map.put(InfoMapKey.MEM_BUFFER, s[0].trim());
		
		//5
		part_num = 0;
		parts = lines[line_num++].split(",");
		s = parts[part_num++].split(":");
		s2 = s[1].split("k");
		info_map.put(InfoMapKey.SWAP_TOTAL, s2[0].trim());
		s = parts[part_num++].split("k");
		info_map.put(InfoMapKey.SWAP_USED, s[0].trim());
		s = parts[part_num++].split("k");
		info_map.put(InfoMapKey.SWAP_FREE, s[0].trim());
		s = parts[part_num++].split("k");
		info_map.put(InfoMapKey.SWAP_CACHED, s[0].trim());

		return (HashMap<String, String>) info_map.clone();
	}

    在client端送hash_map:

public class MClient {

	 public static void main(String[] args) throws Exception { 
		int count = 0;
		
		Socket socket = new Socket(SocketSetting.SERVER_IP, SocketSetting.SERVER_PORT);  
        ObjectOutputStream os = new ObjectOutputStream(socket.getOutputStream());
        
        while (true) {  
 //           HashFunction.printMap(MySystemMonitor.getInfoHashMap());
            os.writeObject(MySystemMonitor.getInfoHashMap());
            os.flush();          

            TimeUnit.MINUTES.sleep(1);
            if(count ++ > 10)
            	break;
        } 
        socket.close(); 
    } 
	 
}

    在server端收has_map:

	private static void invoke(final Socket client) throws IOException {
		new Thread(new Runnable() {
			public void run() {
				ObjectInputStream in = null;
				try {
					MongoClient mongoClient = null;
					mongoClient = new MongoClient();
					SysInfoRecord info_record = new SysInfoRecord(mongoClient);
					in = new ObjectInputStream(new BufferedInputStream(client.getInputStream())); 

					while (true) {
						Object obj = in.readObject(); 
	                    @SuppressWarnings("unchecked")
						HashMap<String,String> info_map = (HashMap<String,String>)obj; 					
//	                    HashFunction.printMap(info_map);
	                    info_record.insertByMap(info_map);
					}
				} catch (IOException ex) {
					ex.printStackTrace();
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					//e.printStackTrace();
				} finally {
					try {
						in.close();
					} catch (Exception e) {
					}
					try {
						client.close();
					} catch (Exception e) {
					}
				}
			}
		}).start();
	}

MongoDB部分:

public class SysInfoRecord {
	String db_name = DbSetting.SYS_INFO_DB;
	String coll_name = DbSetting.SYS_INFO_RECORD;
	private DBCollection coll;
	
	public SysInfoRecord(MongoClient mongoClient){
			DB db = mongoClient.getDB(db_name);
			this.coll = db.getCollection(coll_name);
	}
	
	public boolean insertByMap(HashMap<String,String> map){
		BasicDBObject info_record = new BasicDBObject(InfoMapKey.IP, map.get(InfoMapKey.IP)).
                append(InfoMapKey.REPORT_TIME, map.get(InfoMapKey.REPORT_TIME)).
                append(InfoMapKey.EXIST_TIME, map.get(InfoMapKey.EXIST_TIME)).
                append(InfoMapKey.USER_NUM, Integer.parseInt(map.get(InfoMapKey.USER_NUM))).
                append(InfoMapKey.LOAD_AVERAGE, new BasicDBObject("1 min", Float.parseFloat(map.get(InfoMapKey.LOAD_AVERAGE_1))).
                										append("5 min",Float.parseFloat(map.get(InfoMapKey.LOAD_AVERAGE_5))).
                										append("15 min",Float.parseFloat(map.get(InfoMapKey.LOAD_AVERAGE_15)))).
				append(InfoMapKey.TASK, new BasicDBObject("total", Integer.parseInt(map.get(InfoMapKey.TASK_TOTAL))).
												append("running",Integer.parseInt(map.get(InfoMapKey.TASK_RUNNING))).
												append("sleeping",Integer.parseInt(map.get(InfoMapKey.TASK_SLEEPING))).
												append("stopped",Integer.parseInt(map.get(InfoMapKey.TASK_STOPPED))).
												append("zombie",Integer.parseInt(map.get(InfoMapKey.TASK_ZOMBIE)))).
                append(InfoMapKey.CPU, new BasicDBObject("us", Float.parseFloat(map.get(InfoMapKey.CPU_US))).
												append("sy",Float.parseFloat(map.get(InfoMapKey.CPU_SY))).
												append("ni",Float.parseFloat(map.get(InfoMapKey.CPU_NI))).
												append("id",Float.parseFloat(map.get(InfoMapKey.CPU_ID))).
												append("wa",Float.parseFloat(map.get(InfoMapKey.CPU_WA))).
												append("hi",Float.parseFloat(map.get(InfoMapKey.CPU_HI))).
												append("si",Float.parseFloat(map.get(InfoMapKey.CPU_SI))).
												append("st",Float.parseFloat(map.get(InfoMapKey.CPU_ST)))).
                append(InfoMapKey.MEM, new BasicDBObject("total", Integer.parseInt(map.get(InfoMapKey.MEM_TOTAL))).
												append("used",Integer.parseInt(map.get(InfoMapKey.MEM_USED))).
												append("free",Integer.parseInt(map.get(InfoMapKey.MEM_FREE))).
												append("buffer",Integer.parseInt(map.get(InfoMapKey.MEM_BUFFER)))).
                append(InfoMapKey.SWAP, new BasicDBObject("total", Integer.parseInt(map.get(InfoMapKey.SWAP_TOTAL))).
						append("used",Integer.parseInt(map.get(InfoMapKey.SWAP_USED))).
						append("free",Integer.parseInt(map.get(InfoMapKey.SWAP_FREE))).
						append("cached",Integer.parseInt(map.get(InfoMapKey.SWAP_CACHED))));

		coll.insert(info_record);

		return true;
	}
}

一些用于设置的就省略了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为什么会这样[user_mongo@nosql01 replicaset]$ cd /opt [user_mongo@nosql01 opt]$ ll total 0 drwxr-xr-x. 3 root root 25 Mar 16 17:08 servers drwxr-xr-x. 2 root root 51 Mar 16 17:10 software [user_mongo@nosql01 opt]$ tar -zxvf /opt/software/mongodb-linux-x86_64-rhel70-4.4.12.tgz -C /opt/servers/mongodb_demo/replicaset/ mongodb-linux-x86_64-rhel70-4.4.12/LICENSE-Community.txt tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/LICENSE-Community.txt: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/MPL-2 tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/MPL-2: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/README tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/README: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/THIRD-PARTY-NOTICES tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/THIRD-PARTY-NOTICES: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/install_compass tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/install_compass: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongo tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongo: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongod tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongod: Cannot open: No such file or directory mongodb-linux-x86_64-rhel70-4.4.12/bin/mongos tar: mongodb-linux-x86_64-rhel70-4.4.12: Cannot mkdir: Permission denied tar: mongodb-linux-x86_64-rhel70-4.4.12/bin/mongos: Cannot open: No such file or directory tar: Exiting with failure status due to previous errors [user_mongo@nosql01 opt]$ tar -zcvf /opt/software/mongodb-linux-x86_64-rhel70-4.4.12.tgz -C /opt/servers/mongodb_demo/replicaset/ tar: Cowardly refusing to create an empty archive Try `tar --help' or `tar --usage' for more information.
06-01

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值