summaryrefslogblamecommitdiffstats
path: root/gearman/controllerWorker/ControllerWorker/PoolctrlRequest.java
blob: 102c7628dc198d55a9fd22b124c94ce0aa888aa2 (plain) (tree)
1
2
3
4
5
6
7
8


                              
                               

                                  
                    
                                        


                               
                                             

                                                                             

                              
                                        
                                               
 


                                                                                                                          
                     





                                                                                     
                                       
                                                   
                 

















                                                                                
                                                
                                               
                                                           









                                                    












                                                                                    











                                                                                
                                                   

                 








                                                                                     
 
package ControllerWorker;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.PropertyResourceBundle;

import org.apache.log4j.Logger;

public class PoolctrlRequest extends Thread {
	static final Logger logger = Logger.getLogger(PoolctrlRequest.class);

	private URL runURL;
	private URL reportURL;
	private final long updatePeriod;
	private PropertyResourceBundle iniFile;

	public PoolctrlRequest() {
		iniFile = getIniFile("../../application/configs/application.ini");
		updatePeriod = Long.parseLong(iniFile.getString("event.updatePeriod")) * 60L * 1000000000L; // nanoseconds
		try {
			this.runURL = new URL("http://"
					+ iniFile.getString("poolctrl.host")
					+ iniFile.getString("poolctrl.runevent"));
			this.reportURL = new URL("http://"
					+ iniFile.getString("poolctrl.host")
					+ iniFile.getString("poolctrl.reportevent"));
		} catch (Exception e) {
			logger.error(e.toString());
		}
	}

	public void run() {
		workerLoop();
	}

	public void workerLoop() {
		long beginTime;
		long timeTaken;
		long timeLeft;
		while (true) {
			try {
				beginTime = System.nanoTime();
				update();
				timeTaken = System.nanoTime() - beginTime;
				timeLeft = (updatePeriod - timeTaken) / 1000000;
				if (timeLeft < 10)
					timeLeft = 10;
				sleep(timeLeft);
			} catch (Exception e) {
				logger.error(e.toString());
			}
		}
	}

	public void update() {
		HttpURLConnection connection = null;
		BufferedReader rd = null;
		StringBuilder sb = null;
		String line = null;
		try {
			connection = (HttpURLConnection) runURL.openConnection();
			connection.setRequestMethod("GET");
			connection.setDoOutput(true);
			connection.connect();
			rd = new BufferedReader(new InputStreamReader(connection
					.getInputStream()));
			sb = new StringBuilder();

			while ((line = rd.readLine()) != null) {
				sb.append(line + '\n');
			}
			logger.info(sb.toString());
			connection = (HttpURLConnection) reportURL.openConnection();
			connection.setRequestMethod("GET");
			connection.setDoOutput(true);
			connection.connect();
			rd = new BufferedReader(new InputStreamReader(connection
					.getInputStream()));
			sb = new StringBuilder();

			while ((line = rd.readLine()) != null) {
				sb.append(line + '\n');
			}
			logger.info(sb.toString());
		} catch (Exception e) {
			logger.error(e.toString());
		}
	}

	private static PropertyResourceBundle getIniFile(String file) {
		try {
			return new PropertyResourceBundle(new FileInputStream(file));
		} catch (Exception e) {
			logger.error(e.toString());
			return null;
		}
	}
}