This repository has been archived on 2025-12-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
tcommon-studio-se/main/plugins/org.talend.librariesmanager/resources/java/routines/system/MRRunStat.java

204 lines
5.2 KiB
Java

// ============================================================================
//
// Copyright (C) 2006-2021 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package routines.system;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
/**
* created by bchen on Jul 24, 2013 Detailled comment
*
*/
public class MRRunStat implements Runnable {
private static boolean debug = false;
private java.net.Socket s;
protected java.io.PrintWriter pred;
private boolean jobIsFinished = false;
private List<StatBean> messages = new ArrayList<>();
public class StatBean {
private int groupID;
private int mrJobID;
private float mapProgress;
private float reduceProgress;
/**
* Getter for groupID.
*
* @return the groupID
*/
public int getGroupID() {
return this.groupID;
}
/**
* Sets the groupID.
*
* @param groupID the groupID to set
*/
public void setGroupID(int groupID) {
this.groupID = groupID;
}
/**
* Getter for mrJobID.
*
* @return the mrJobID
*/
public int getMRJobID() {
return this.mrJobID;
}
/**
* Sets the mrJobID.
*
* @param mrJobID the mrJobID to set
*/
public void setMRJobID(int mrJobID) {
this.mrJobID = mrJobID;
}
/**
* Getter for mapProgress.
*
* @return the mapProgress
*/
public float getMapProgress() {
return this.mapProgress;
}
/**
* Sets the mapProgress.
*
* @param mapProgress the mapProgress to set
*/
public void setMapProgress(float mapProgress) {
this.mapProgress = mapProgress;
}
/**
* Getter for reduceProgress.
*
* @return the reduceProgress
*/
public float getReduceProgress() {
return this.reduceProgress;
}
/**
* Sets the reduceProgress.
*
* @param reduceProgress the reduceProgress to set
*/
public void setReduceProgress(float reduceProgress) {
this.reduceProgress = reduceProgress;
}
/**
* DOC bchen Comment method "toStatFormat".
*
* @return
*/
public String toStatFormat() {
return this.groupID + "|" + this.mrJobID + "|" + this.mapProgress + "|" + this.reduceProgress;
}
}
public StatBean createStatBean() {
return new StatBean();
}
public void startThreadStat(String clientHost, int portStats) throws java.io.IOException, java.net.UnknownHostException {
System.out.println("[statistics] connecting to socket on port " + portStats); //$NON-NLS-1$
boolean isConnect = false;
OutputStream output = null;
try {
s = new Socket(clientHost, portStats);
isConnect = true;
} catch (Exception e) {
System.err.println("Unable to connect to " + clientHost + " on the port " + portStats);
}
if (isConnect) {
output = s.getOutputStream();
System.out.println("[statistics] connected"); //$NON-NLS-1$
} else {
output = System.out;
System.out.println("[statistics] connection refused"); //$NON-NLS-1$
}
if (debug) {
output = System.out;
}
pred = new java.io.PrintWriter(new java.io.BufferedWriter(new java.io.OutputStreamWriter(output)), true);
Thread t = new Thread(this);
t.start();
}
@Override
public void run() {
if (!debug) {
synchronized (this) {
try {
while (!jobIsFinished) {
sendMessages();
wait(1000);
}
} catch (InterruptedException e) {
System.out.println("[statistics] interrupted"); //$NON-NLS-1$
}
}
}
}
public void stopThreadStat() {
jobIsFinished = true;
try {
sendMessages();
if (pred != null) {
pred.close();
}
if (s != null && !s.isClosed()) {
s.close();
}
System.out.println("[statistics] disconnected"); //$NON-NLS-1$
} catch (java.io.IOException ie) {
}
}
public void sendMessages() {
for (StatBean message : messages) {
pred.println(message.toStatFormat());
}
messages.clear();
}
public synchronized void updateMRProgress(StatBean message) {
messages.add(message);
if (debug) {
sendMessages();
}
}
}