Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge release #181

Merged
merged 35 commits into from
Jan 3, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
cf7cfc6
add build stage for release branch
dbusel Dec 12, 2018
d736a2c
rename build stage for master branch
dbusel Dec 12, 2018
fc0b012
Merge branch 'release' into develop
dbusel Dec 12, 2018
f7b69f6
remove additional mvn build on stages
dbusel Dec 12, 2018
5f81245
feat(core) version placeholder (EWC-410)
epankou Dec 12, 2018
8df6645
bug(fix) updated docker url validation (EWC-412) (#157)
Railag Dec 12, 2018
7509b5c
version 1.0.6
Railag Dec 13, 2018
a83eccf
version 1.0.6
alexandershpak Dec 13, 2018
887bc01
Merge branch 'release' into develop
dbusel Dec 13, 2018
7235100
EWC-410 version placeholder
epankou Dec 13, 2018
e66c504
EWC-414 watchdog feature fix
epankou Dec 14, 2018
a7ff56d
fix(core) fog controller status issue
alexandershpak Dec 14, 2018
4164c80
fix(core) watchdog feature (EWC-414)
alexandershpak Dec 14, 2018
0b77a4e
bug(core) fixed strace request (#162)
Railag Dec 14, 2018
74ecf63
EWC-421 strace feature bug
epankou Dec 17, 2018
ad6f157
EWC-421 strace feature fix
epankou Dec 17, 2018
3c98b85
EWC-421 strace feature fix
epankou Dec 17, 2018
e24c222
feat(core) strace (EWC-421)
alexandershpak Dec 17, 2018
507cb2d
Bug(fix) message bug: concurrent usage of session object which isn't …
epankou Dec 19, 2018
e7ced74
Bug(fix) message bug: concurrent usage of session object which isn't …
alexandershpak Dec 19, 2018
6b51918
bug(fix) fixed help logs measurement (EWC-431) (#166)
Railag Dec 19, 2018
fa94268
bug(fix) microservice removal: networking microservice isn't removed …
epankou Dec 20, 2018
faa5140
version 1.0.7
Railag Dec 20, 2018
8ef66fa
Merge branch 'release' into develop
dbusel Dec 20, 2018
00c4e53
Epankou/bug routes update ewc 374 (#171)
epankou Dec 27, 2018
c17b6a5
version 1.0.8 (#172)
Railag Dec 27, 2018
7197303
Merge branch 'release' into develop
dbusel Dec 27, 2018
1b1f7b6
update package before build on prod env
dbusel Dec 28, 2018
fb1c826
Epankou/bug mic removal sync ewc 374 (#174)
epankou Dec 29, 2018
4d0343e
Epankou/bug strace get pid ewc 421 (#176)
epankou Dec 29, 2018
6655746
Epankou/bug strace kill orphaned processes ewc 421 (#177)
epankou Jan 3, 2019
d321657
Upgrade/rollback issue (#178)
dbusel Jan 3, 2019
f2161fc
version 1.0.9 (#179)
Railag Jan 3, 2019
8b014c3
Merge branch 'release' into develop
dbusel Jan 3, 2019
53929f4
Update .travis.yml
dbusel Jan 3, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
- sudo apt-get install sshpass xml-twig-tools
script:
- sshpass -p $PROD_MACHINE_PASSWORD ssh -o StrictHostKeyChecking=no $PROD_MACHINE_USERNAME@$PROD_MACHINE_IP
"service iofog-agent stop"
"service iofog-agent stop; sudo apt-get install --only-upgrade -y iofog-agent"
- sshpass -p $PROD_MACHINE_PASSWORD scp -o StrictHostKeyChecking=no daemon/target/iofog-agent-daemon-jar-with-dependencies.jar
$PROD_MACHINE_USERNAME@$PROD_MACHINE_IP:/usr/bin/iofog-agentd.jar
- sshpass -p $PROD_MACHINE_PASSWORD scp -o StrictHostKeyChecking=no client/target/iofog-agent-client-jar-with-dependencies.jar
Expand Down
2 changes: 1 addition & 1 deletion client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<parent>
<groupId>org.eclipse</groupId>
<artifactId>iofog-agent</artifactId>
<version>1.0.8</version>
<version>1.0.9</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion daemon/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<parent>
<groupId>org.eclipse</groupId>
<artifactId>iofog-agent</artifactId>
<version>1.0.8</version>
<version>1.0.9</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
243 changes: 131 additions & 112 deletions daemon/src/org/eclipse/iofog/command_line/util/CommandShellExecutor.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,116 +34,135 @@
* on 2/7/18.
*/
public class CommandShellExecutor {
private static final String MODULE_NAME = "CommandShellExecutor";
private static final String CMD = "/bin/sh";
private static final String CMD_WIN = "powershell";


public static CommandShellResultSet<List<String>, List<String>> executeCommand(String command) {
String[] fullCommand = computeCommand(command);
return execute(fullCommand);
}

public static CommandShellResultSet<List<String>, List<String>> executeScript(String script, String... args) {
String[] fullCommand = computeScript(script, args);
return execute(fullCommand);
}

public static void executeDynamicCommand(String command, CommandShellResultSet<List<String>, List<String>> resultSet, AtomicBoolean isRun) {
String[] fullCommand = computeCommand(command);
executeDynamic(fullCommand, resultSet, isRun);
}

private static CommandShellResultSet<List<String>, List<String>> execute( String[] fullCommand) {
CommandShellResultSet<List<String>, List<String>> resultSet = null;
try {
Process process = Runtime.getRuntime().exec(fullCommand);
List<String> value = readOutput(process, Process::getInputStream);
List<String> errors = readOutput(process, Process::getErrorStream);
resultSet = new CommandShellResultSet<>(value, errors);
} catch (IOException e) {
LoggingService.logWarning(MODULE_NAME, e.getMessage());
}
return resultSet;
}

private static void executeDynamic( String[] fullCommand, CommandShellResultSet<List<String>, List<String>> resultSet, AtomicBoolean isRun) {
try {
Process process = Runtime.getRuntime().exec(fullCommand);

Runnable readVal = () -> {
readOutputDynamic(process, Process::getInputStream, resultSet.getValue(), isRun);
};
new Thread(readVal).start();

Runnable readErr = () -> {
readOutputDynamic(process, Process::getErrorStream, resultSet.getError(), isRun);
};
new Thread(readErr).start();

} catch (IOException e) {
LoggingService.logWarning(MODULE_NAME, e.getMessage());
}
}


public static <V, E> CommandShellResultSet<V, E> executeCommand(String command, Function<CommandShellResultSet<List<String>, List<String>>, CommandShellResultSet<V, E>> mapper) {
return executeCommand(command).map(mapper);
}

private static String[] computeCommand(String command) {
return new String[]{
SystemUtils.IS_OS_WINDOWS ? CMD_WIN : CMD,
"-c",
command
};
}

private static String[] computeScript(String script, String... args) {
String[] command = {
SystemUtils.IS_OS_WINDOWS ? CMD_WIN : CMD,
script
};

Stream<String> s1 = Arrays.stream(command);
Stream<String> s2 = Arrays.stream(args);
return Stream.concat(s1, s2).toArray(String[]::new);
}

private static List<String> readOutput(Process process, Function<Process, InputStream> streamExtractor) throws IOException {
List<String> result = new ArrayList<>();
String line;
try (BufferedReader stdInput = new BufferedReader(new
InputStreamReader(streamExtractor.apply(process), UTF_8))) {
while ((line = stdInput.readLine()) != null) {
result.add(line);
}
}
return result;
}

private static void readOutputDynamic(Process process, Function<Process,
InputStream> streamExtractor, List<String> result,
AtomicBoolean isRun) {
String line;
if (result == null) {
return;
}
try (BufferedReader stdInput = new BufferedReader(new
InputStreamReader(streamExtractor.apply(process)))) {

while (isRun != null && isRun.get()) {
line = stdInput.readLine();
if (line != null) {
result.add(line);
} else {
Thread.sleep(3000);
}
}
} catch (InterruptedException | IOException e) {
LoggingService.logWarning(MODULE_NAME, e.getMessage());
} finally {
process.destroy();
}
}
private static final String MODULE_NAME = "CommandShellExecutor";
private static final String CMD = "/bin/sh";
private static final String CMD_WIN = "powershell";


public static CommandShellResultSet<List<String>, List<String>> executeCommand(String command) {
String[] fullCommand = computeCommand(command);
return execute(fullCommand);
}

public static CommandShellResultSet<List<String>, List<String>> executeScript(String script, String... args) {
String[] fullCommand = computeScript(script, args);
return execute(fullCommand);
}

public static void executeDynamicCommand(String command,
CommandShellResultSet<List<String>, List<String>> resultSet,
AtomicBoolean isRun,
Runnable killOrphanedProcessesRunnable) {
String[] fullCommand = computeCommand(command);
executeDynamic(fullCommand, resultSet, isRun, killOrphanedProcessesRunnable);
}

private static CommandShellResultSet<List<String>, List<String>> execute(String[] fullCommand) {
CommandShellResultSet<List<String>, List<String>> resultSet = null;
try {
Process process = Runtime.getRuntime().exec(fullCommand);
List<String> value = readOutput(process, Process::getInputStream);
List<String> errors = readOutput(process, Process::getErrorStream);
resultSet = new CommandShellResultSet<>(value, errors);
} catch (IOException e) {
LoggingService.logWarning(MODULE_NAME, e.getMessage());
}
return resultSet;
}

private static void executeDynamic(String[] fullCommand,
CommandShellResultSet<List<String>, List<String>> resultSet,
AtomicBoolean isRun,
Runnable killOrphanedProcessesRunnable) {
try {
Process process = Runtime.getRuntime().exec(fullCommand);

Runnable readVal = () -> {
readOutputDynamic(process, Process::getInputStream, resultSet.getValue(), isRun, killOrphanedProcessesRunnable);
};
new Thread(readVal).start();

Runnable readErr = () -> {
readOutputDynamic(process, Process::getErrorStream, resultSet.getError(), isRun, killOrphanedProcessesRunnable);
};
new Thread(readErr).start();

} catch (IOException e) {
LoggingService.logWarning(MODULE_NAME, e.getMessage());
}
}


public static <V, E> CommandShellResultSet<V, E> executeCommand(String command, Function<CommandShellResultSet<List<String>, List<String>>, CommandShellResultSet<V, E>> mapper) {
return executeCommand(command).map(mapper);
}

private static String[] computeCommand(String command) {
return new String[]{
SystemUtils.IS_OS_WINDOWS ? CMD_WIN : CMD,
"-c",
command
};
}

private static String[] computeScript(String script, String... args) {
String[] command = {
SystemUtils.IS_OS_WINDOWS ? CMD_WIN : CMD,
script
};

Stream<String> s1 = Arrays.stream(command);
Stream<String> s2 = Arrays.stream(args);
return Stream.concat(s1, s2).toArray(String[]::new);
}

private static List<String> readOutput(Process process, Function<Process, InputStream> streamExtractor) throws IOException {
List<String> result = new ArrayList<>();
String line;
try (BufferedReader stdInput = new BufferedReader(new
InputStreamReader(streamExtractor.apply(process), UTF_8))) {
while ((line = stdInput.readLine()) != null) {
result.add(line);
}
}
return result;
}

private static void readOutputDynamic(Process process,
Function<Process, InputStream> streamExtractor,
List<String> result,
AtomicBoolean isRun,
Runnable killOrphanedProcessesRunnable) {
StringBuilder line = new StringBuilder();
if (result == null) {
return;
}
try (BufferedReader reader = new BufferedReader(new
InputStreamReader(streamExtractor.apply(process)))) {

while (isRun != null && isRun.get()) {
if (reader.ready()) {
int c = reader.read();
if (c == -1) {
break;
}
if (System.lineSeparator().contains(Character.toString((char)c)) && line.length() != 0) {
result.add(line.toString());
line.setLength(0);
} else {
line.append((char)c);
}
} else {
Thread.sleep(3000);
}
}
} catch (InterruptedException | IOException e) {
LoggingService.logWarning(MODULE_NAME, e.getMessage());
} finally {
process.destroy();
if (killOrphanedProcessesRunnable != null) {
killOrphanedProcessesRunnable.run();
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,12 @@

import org.eclipse.iofog.command_line.util.CommandShellExecutor;
import org.eclipse.iofog.command_line.util.CommandShellResultSet;
import org.eclipse.iofog.process_manager.DockerUtil;
import org.eclipse.iofog.utils.logging.LoggingService;

import javax.json.*;
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonValue;
import java.util.List;
import java.util.Optional;
import java.util.concurrent.CopyOnWriteArrayList;
Expand Down Expand Up @@ -81,7 +84,7 @@ private Optional<MicroserviceStraceData> getStraceDataByMicroserviceUuid(String

public void enableMicroserviceStraceDiagnostics(String microserviceUuid) {
try {
int pid = getPidByMicroserviceUuid(microserviceUuid);
int pid = getPidByMicroserviceUuid(DockerUtil.getContainerName(microserviceUuid));
MicroserviceStraceData newMicroserviceStraceData = new MicroserviceStraceData(microserviceUuid, pid, true);
this.monitoringMicroservices.removeIf(
oldMicroserviceStraceData -> oldMicroserviceStraceData.getMicroserviceUuid().equals(microserviceUuid)
Expand Down Expand Up @@ -114,7 +117,21 @@ private int getPidByMicroserviceUuid(String microserviceUuid) throws IllegalArgu
private void runStrace(MicroserviceStraceData microserviceStraceData) {
String straceCommand = "strace -p " + microserviceStraceData.getPid();
CommandShellResultSet<List<String>, List<String>> resultSet = new CommandShellResultSet<>(null, microserviceStraceData.getResultBuffer());
CommandShellExecutor.executeDynamicCommand(straceCommand, resultSet, microserviceStraceData.getStraceRun());
CommandShellExecutor.executeDynamicCommand(
straceCommand,
resultSet,
microserviceStraceData.getStraceRun(),
killOrphanedStraceProcessesRunnable()
);
}

private Runnable killOrphanedStraceProcessesRunnable() {
return () -> {
CommandShellResultSet<List<String>, List<String>> resultSet = CommandShellExecutor.executeCommand("pgrep strace");
if (resultSet.getValue() != null) {
resultSet.getValue().forEach(value -> CommandShellExecutor.executeCommand(String.format("kill -9 %s", value)));
}
};
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public class VersionHandler {
private static final String MODULE_NAME = "Version Handler";

private final static String PACKAGE_NAME = "iofog-agent";
private final static String BACKUPS_DIR = SystemUtils.IS_OS_WINDOWS ? SNAP_COMMON + "./var/backups/iofog-agent" : SNAP_COMMON + "/var/backups/iofog";
private final static String BACKUPS_DIR = SystemUtils.IS_OS_WINDOWS ? SNAP_COMMON + "./var/backups/iofog-agent" : SNAP_COMMON + "/var/backups/iofog-agent";
private final static String MAX_RESTARTING_TIMEOUT = "60";

private final static String GET_LINUX_DISTRIBUTION_NAME = "grep = /etc/os-release | awk -F\"[=]\" '{print $2}' | sed -n 1p";
Expand Down
6 changes: 4 additions & 2 deletions daemon/src/org/eclipse/iofog/microservice/Microservice.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
*/
public class Microservice {

public static final Object deleteLock = new Object();
private final String microserviceUuid; //container name
private final String imageName;
private List<PortMapping> portMappings;
Expand All @@ -34,6 +35,7 @@ public class Microservice {
private long logSize;
private List<VolumeMapping> volumeMappings;
private boolean isUpdating;

private boolean delete;
private boolean deleteWithCleanup;

Expand Down Expand Up @@ -123,11 +125,11 @@ public void setVolumeMappings(List<VolumeMapping> volumeMappings) {
this.volumeMappings = volumeMappings;
}

public boolean isUpdating() {
public synchronized boolean isUpdating() {
return isUpdating;
}

public void setUpdating(boolean updating) {
public synchronized void setUpdating(boolean updating) {
isUpdating = updating;
}

Expand Down
Loading