Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Empty file added .claude/settings.local.json
Empty file.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,7 @@ scouter.agent.batch/.settings/org.eclipse.core.resources.prefs
/scouter.webapp/conf/scouterConfSample3.conf
scouter.server.jar
AGENTS.md

.claude
*/.DS_Store
.sdkmanrc
36 changes: 23 additions & 13 deletions scouter.client.build/pom.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
Expand All @@ -16,13 +16,18 @@
<tycho-version>5.0.1</tycho-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repositories>
<repository>
<id>eclipse-2025-12</id>
<layout>p2</layout>
<url>https://download.eclipse.org/releases/2025-12/</url>
</repository>
</repositories>
<repository>
<id>justj-jre-21</id>
<layout>p2</layout>
<url>https://download.eclipse.org/justj/jres/21/updates/release/latest</url>
</repository>
</repositories>

<build>
<plugins>
Expand All @@ -33,16 +38,21 @@
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<environments>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86_64</arch>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<dependency-resolution>
<profileProperties>
<org.eclipse.justj.buildtime>true</org.eclipse.justj.buildtime>
</profileProperties>
</dependency-resolution>
<environments>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86_64</arch>
</environment>
<environment>
<os>linux</os>
Expand Down
5 changes: 5 additions & 0 deletions scouter.client.product/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,14 @@
<copy file="${project.basedir}/scripts/run-scouter.command"
todir="${project.build.directory}/products/scouter.client.product/macosx/cocoa/aarch64/scouter.client"
failonerror="false"/>
<!-- Linux x86_64 -->
<copy file="${project.basedir}/scripts/run-scouter.sh"
todir="${project.build.directory}/products/scouter.client.product/linux/gtk/x86_64/scouter.client"
failonerror="false"/>
<!-- 실행 권한 부여 -->
<chmod file="${project.build.directory}/products/scouter.client.product/macosx/cocoa/x86_64/scouter.client/run-scouter.command" perm="755" failonerror="false"/>
<chmod file="${project.build.directory}/products/scouter.client.product/macosx/cocoa/aarch64/scouter.client/run-scouter.command" perm="755" failonerror="false"/>
<chmod file="${project.build.directory}/products/scouter.client.product/linux/gtk/x86_64/scouter.client/run-scouter.sh" perm="755" failonerror="false"/>
</target>
</configuration>
</execution>
Expand Down
6 changes: 4 additions & 2 deletions scouter.client.product/scouter.client.product
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
<programArgsWin>-data
@user.home/scouter
</programArgsWin>
<vmArgs>-Xms128m
-Xmx1024m
<vmArgs>-Xms1g
-Xmx2g
-XX:+UseG1GC
-Dosgi.requiredJavaVersion=21
</vmArgs>
Expand Down Expand Up @@ -60,6 +60,8 @@
</plugins>

<features>
<feature id="org.eclipse.justj.openjdk.hotspot.jre.full.stripped" installMode="root"/>
<feature id="org.eclipse.rcp"/>
<feature id="org.eclipse.platform"/>
<feature id="org.eclipse.equinox.executable"/>
<feature id="scouter.client.feature"/>
Expand Down
30 changes: 24 additions & 6 deletions scouter.client.product/scripts/run-scouter.command
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#!/bin/bash
#
# Scouter Client Launcher for macOS
# 이 스크립트는 quarantine 속성을 제거하고 Scouter Client를 실행합니다.
# 번들 JRE(JustJ)가 scouter.ini에 설정되어 있으므로
# 네이티브 런처가 자동으로 번들 JRE를 사용합니다.
# 이 스크립트는 번들 JRE가 없는 경우에만 시스템 Java를 확인합니다.
#

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
Expand All @@ -10,17 +12,33 @@ APP_PATH="$SCRIPT_DIR/$APP_NAME"

# 앱이 존재하는지 확인
if [ ! -d "$APP_PATH" ]; then
echo "❌ 오류: $APP_NAME 을 찾을 수 없습니다."
echo "이 스크립트를 $APP_NAME 과 같은 폴더에 위치시켜 주세요."
echo "Error: $APP_NAME not found."
echo "Please place this script in the same folder as $APP_NAME."
read -p "Press Enter to exit..."
exit 1
fi

# 번들 JRE 확인 (plugins 하위에 JustJ JRE가 배치됨)
BUNDLED_JRE=$(find "$APP_PATH/Contents/Eclipse/plugins" -path "*/justj*/jre/bin/java" 2>/dev/null | head -1)
if [ -z "$BUNDLED_JRE" ]; then
# 시스템 Java 확인
if ! command -v java &> /dev/null; then
echo "Error: Java not found. Please install Java 21+."
echo " Recommended: https://adoptium.net/"
read -p "Press Enter to exit..."
exit 1
fi
JAVA_VER=$(java -version 2>&1 | head -1 | sed 's/.*"\(.*\)".*/\1/' | cut -d. -f1)
if [ "$JAVA_VER" -lt 21 ] 2>/dev/null; then
echo "Error: Java 21+ required. Current: Java $JAVA_VER"
echo " Recommended: https://adoptium.net/"
read -p "Press Enter to exit..."
exit 1
fi
fi

# quarantine 속성 제거
echo "🔓 보안 속성을 제거하는 중..."
xattr -cr "$APP_PATH"

# 앱 실행
echo "🚀 Scouter Client를 실행합니다..."
open "$APP_PATH"

22 changes: 22 additions & 0 deletions scouter.client.product/scripts/run-scouter.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#!/bin/bash
#
# Scouter Client Launcher for Linux
# 번들 JRE(JustJ)가 scouter.ini에 설정되어 있으므로
# 네이티브 런처가 자동으로 번들 JRE를 사용합니다.
# 이 스크립트는 번들 JRE가 없는 경우에만 시스템 Java를 확인합니다.
#

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

# 번들 JRE 확인 (plugins 하위에 JustJ JRE가 배치됨)
BUNDLED_JRE=$(find "$SCRIPT_DIR/plugins" -path "*/justj*/jre/bin/java" 2>/dev/null | head -1)
if [ -z "$BUNDLED_JRE" ]; then
# 시스템 Java 확인
if ! command -v java &> /dev/null; then
echo "Error: Java not found. Please install Java 21+."
echo " Recommended: https://adoptium.net/"
exit 1
fi
fi

exec "$SCRIPT_DIR/scouter" "$@"
37 changes: 35 additions & 2 deletions scouter.client/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1194,6 +1194,24 @@
id="scouter.client.actions.OpenServerManagerAction"
name="Open ServerManager">
</command>
<command
categoryId="scouter.client.category"
description="Import workspace from file"
id="scouter.client.actions.ImportWorkspaceFromFileAction"
name="Import Workspace From File">
</command>
<command
categoryId="scouter.client.category"
description="Import workspace from GitHub"
id="scouter.client.actions.ImportWorkspaceFromGitHubAction"
name="Import Workspace From GitHub">
</command>
<command
categoryId="scouter.client.category"
description="Switch Workspace"
id="scouter.client.actions.SwitchWorkspaceAction"
name="Switch Workspace">
</command>
</extension>
<extension
point="org.eclipse.ui.bindings">
Expand Down Expand Up @@ -1231,9 +1249,24 @@
label="Export perspective settings"
style="push">
</command>
<menu
id="scouter.menu.import.perspective"
label="Import perspective settings">
<command
commandId="scouter.client.actions.ImportWorkspaceFromFileAction"
label="File"
style="push">
</command>
<command
commandId="scouter.client.actions.ImportWorkspaceFromGitHubAction"
label="GitHub"
style="push">
</command>
</menu>
<separator name="file.separator3" visible="true"/>
<command
commandId="scouter.client.actions.ImportWorkspaceAction"
label="Import perspective settings"
commandId="scouter.client.actions.SwitchWorkspaceAction"
label="Switch Workspace..."
style="push">
</command>
<command
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import org.csstudio.swt.xygraph.Preferences;
import org.csstudio.swt.xygraph.figures.Trace.TraceType;
import org.csstudio.swt.xygraph.util.XYGraphMediaFactory;
import scouter.client.util.ColorUtil;
import org.eclipse.draw2d.FigureUtilities;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.MouseEvent;
Expand Down Expand Up @@ -55,7 +56,7 @@ public void propertyChange(PropertyChangeEvent evt) {
}
});
setBackgroundColor(xyGraph.getPlotArea().getBackgroundColor());
setForegroundColor(BLACK_COLOR);
setForegroundColor(ColorUtil.getChartForeground());
setOpaque(false);
setOutline(false); // Edited by scouter.project true -> false
addListenerToBoldline(); // Added by scouter.project
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.csstudio.swt.xygraph.util.SWTConstants;
import org.csstudio.swt.xygraph.util.XYGraphMediaFactory;
import org.csstudio.swt.xygraph.util.XYGraphMediaFactory.CURSOR_TYPE;
import scouter.client.util.ColorUtil;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.MouseEvent;
Expand Down Expand Up @@ -91,9 +92,8 @@ public void removePropertyChangeListener(String property,

public PlotArea(final XYGraph xyGraph) {
this.xyGraph = xyGraph;
setBackgroundColor(XYGraphMediaFactory.getInstance().getColor(255, 255,
255));
setForegroundColor(XYGraphMediaFactory.getInstance().getColor(0, 0, 0));
setBackgroundColor(ColorUtil.getChartBackground());
setForegroundColor(ColorUtil.getChartForeground());
setOpaque(true);
RGB backRGB = getBackgroundColor().getRGB();
revertBackColor = XYGraphMediaFactory.getInstance().getColor(
Expand Down
29 changes: 28 additions & 1 deletion scouter.client/src/org/csstudio/swt/xygraph/figures/XYGraph.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.csstudio.swt.xygraph.util.Log10;
import org.csstudio.swt.xygraph.util.SingleSourceHelper;
import org.csstudio.swt.xygraph.util.XYGraphMediaFactory;
import scouter.client.util.ColorUtil;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.Label;
Expand Down Expand Up @@ -125,6 +126,26 @@ public void setXyGraphMem(XYGraphMemento xyGraphMem) {
new RGB(219, 128, 4), // orange
};

final public static RGB[] DEFAULT_TRACES_COLOR_DARK =
{
new RGB( 80, 140, 255), // blue
new RGB(255, 80, 80), // red
new RGB( 80, 220, 80), // green
new RGB(200, 200, 210), // light gray (replaces black)
new RGB(180, 100, 255), // violett
new RGB(255, 200, 60), // yellow
new RGB(255, 80, 240), // pink
new RGB(255, 170, 170), // peachy
new RGB( 80, 255, 80), // neon green
new RGB( 80, 230, 255), // neon blue
new RGB(200, 140, 60), // brown
new RGB(255, 180, 60), // orange
};

public static RGB[] getDefaultTracesColor() {
return ColorUtil.isDarkMode() ? DEFAULT_TRACES_COLOR_DARK : DEFAULT_TRACES_COLOR;
}

private int traceNum = 0;
private boolean transparent = false;
private boolean showLegend = true;
Expand Down Expand Up @@ -190,6 +211,11 @@ public XYGraph() {
primaryXAxis.setTickLableSide(LabelSide.Primary);
addAxis(primaryXAxis);

primaryXAxis.setForegroundColor(ColorUtil.getChartForeground());
primaryYAxis.setForegroundColor(ColorUtil.getChartForeground());
primaryXAxis.setMajorGridColor(ColorUtil.getAxisGridColor());
primaryYAxis.setMajorGridColor(ColorUtil.getAxisGridColor());

operationsManager = new OperationsManager();
}

Expand Down Expand Up @@ -436,8 +462,9 @@ public boolean removeAxis(Axis axis){
public void addTrace(Trace trace){
if (trace.getTraceColor() == null)
{ // Cycle through default colors
RGB[] colors = getDefaultTracesColor();
trace.setTraceColor(XYGraphMediaFactory.getInstance().getColor(
DEFAULT_TRACES_COLOR[traceNum % DEFAULT_TRACES_COLOR.length]));
colors[traceNum % colors.length]));
++traceNum;
}
if(legendMap.containsKey(trace.getYAxis()))
Expand Down
Loading