Skip to content

Commit

Permalink
feat: nvidia smi
Browse files Browse the repository at this point in the history
  • Loading branch information
hstyi committed Feb 20, 2025
1 parent 510324d commit 7aa2c03
Show file tree
Hide file tree
Showing 15 changed files with 547 additions and 33 deletions.
3 changes: 3 additions & 0 deletions src/main/kotlin/app/termora/Icons.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ object Icons {
val changelog by lazy { DynamicIcon("icons/changelog.svg", "icons/changelog_dark.svg") }
val add by lazy { DynamicIcon("icons/add.svg", "icons/add_dark.svg") }
val locate by lazy { DynamicIcon("icons/locate.svg", "icons/locate_dark.svg") }
val percentage by lazy { DynamicIcon("icons/percentage.svg", "icons/percentage_dark.svg") }
val text by lazy { DynamicIcon("icons/text.svg", "icons/text_dark.svg") }
val errorIntroduction by lazy { DynamicIcon("icons/errorIntroduction.svg", "icons/errorIntroduction_dark.svg") }
val networkPolicy by lazy { DynamicIcon("icons/networkPolicy.svg", "icons/networkPolicy_dark.svg") }
val clusterRole by lazy { DynamicIcon("icons/clusterRole.svg", "icons/clusterRole_dark.svg") }
Expand Down Expand Up @@ -117,5 +119,6 @@ object Icons {
val listKey by lazy { DynamicIcon("icons/listKey.svg", "icons/listKey_dark.svg") }
val forwardPorts by lazy { DynamicIcon("icons/forwardPorts.svg", "icons/forwardPorts_dark.svg") }
val showWriteAccess by lazy { DynamicIcon("icons/showWriteAccess.svg", "icons/showWriteAccess_dark.svg") }
val nvidia by lazy { DynamicIcon("icons/nvidia.svg", "icons/nvidia_dark.svg") }

}
4 changes: 3 additions & 1 deletion src/main/kotlin/app/termora/TermoraFrameManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,9 @@ class TermoraFrameManager {
try {
Disposer.getTree().assertIsEmpty(true)
} catch (e: Exception) {
log.error(e.message)
if (log.isErrorEnabled) {
log.error(e.message, e)
}
}

exitProcess(0)
Expand Down
32 changes: 32 additions & 0 deletions src/main/kotlin/app/termora/terminal/panel/FloatingToolbarPanel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import app.termora.actions.AnActionEvent
import app.termora.actions.DataProvider
import app.termora.actions.DataProviders
import app.termora.terminal.DataKey
import app.termora.terminal.panel.vw.NvidiaSMIVisualWindow
import app.termora.terminal.panel.vw.SystemInformationVisualWindow
import com.formdev.flatlaf.extras.components.FlatToolBar
import com.formdev.flatlaf.ui.FlatRoundBorder
Expand Down Expand Up @@ -108,6 +109,9 @@ class FloatingToolbarPanel : FlatToolBar(), Disposable {
// 服务器信息
add(initServerInfoActionButton())

// Nvidia 显卡信息
add(initNvidiaSMIActionButton())

// 重连
add(initReconnectActionButton())

Expand Down Expand Up @@ -143,6 +147,34 @@ class FloatingToolbarPanel : FlatToolBar(), Disposable {
return btn
}

private fun initNvidiaSMIActionButton(): JButton {
val btn = JButton(Icons.nvidia)
btn.toolTipText = I18n.getString("termora.visual-window.nvidia-smi")
btn.addActionListener(object : AnAction() {
override fun actionPerformed(evt: AnActionEvent) {
val tab = evt.getData(DataProviders.TerminalTab) ?: return
val terminalPanel = (tab as DataProvider?)?.getData(DataProviders.TerminalPanel) ?: return

if (tab !is SSHTerminalTab) {
terminalPanel.toast(I18n.getString("termora.floating-toolbar.not-supported"))
return
}

for (window in terminalPanel.getVisualWindows()) {
if (window is NvidiaSMIVisualWindow) {
terminalPanel.moveToFront(window)
return
}
}

val visualWindowPanel = NvidiaSMIVisualWindow(tab, terminalPanel)
terminalPanel.addVisualWindow(visualWindowPanel)

}
})
return btn
}

private fun initPinActionButton(): JButton {
val btn = JButton(Icons.pin)
btn.isSelected = pinAction.isSelected
Expand Down
3 changes: 1 addition & 2 deletions src/main/kotlin/app/termora/terminal/panel/TerminalPanel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -548,8 +548,7 @@ class TerminalPanel(val terminal: Terminal, private val ptyConnector: PtyConnect
override fun addVisualWindow(visualWindow: VisualWindow) {
visualWindows = ArrayUtils.add(visualWindows, visualWindow)
layeredPane.add(visualWindow.getJComponent(), JLayeredPane.DRAG_LAYER as Any)
layeredPane.revalidate()
layeredPane.repaint()
layeredPane.moveToFront(visualWindow.getJComponent())
}

override fun removeVisualWindow(visualWindow: VisualWindow) {
Expand Down
Loading

0 comments on commit 7aa2c03

Please sign in to comment.