Skip to content

Commit

Permalink
Work in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
RaphaelGauthier committed Dec 6, 2023
1 parent 79fd607 commit 3eed39b
Show file tree
Hide file tree
Showing 7 changed files with 624 additions and 543 deletions.
Expand Up @@ -58,6 +58,8 @@ import com.normation.rudder.web.ChooseTemplate
import com.normation.rudder.web.model.JsNodeId
import com.normation.rudder.web.services.CurrentUser
import com.normation.rudder.web.services.DisplayNode
import com.normation.rudder.web.services.DisplayNode.displayMachineType
import com.normation.rudder.web.services.DisplayNode.getNodeState
import com.normation.rudder.web.services.DisplayNodeGroupTree
import net.liftweb.common._
import net.liftweb.http.DispatchSnippet
Expand Down Expand Up @@ -261,12 +263,69 @@ class ShowNodeDetailsFromNode(
val jsId = JsNodeId(nodeId, "")
def htmlId(jsId: JsNodeId, prefix: String): String = prefix + jsId.toString
val detailsId = htmlId(jsId, "details_")

val osIcon = ("os-logo " ++ xml.Utility.escape(sm.node.main.osDetails.os.name.toLowerCase()))

val osTooltip: String = {
s"""
|<h4>Operating system details</h4>
|<div class='tooltip-content'>
| <ul>
| <li><b>Type:</b> ${xml.Utility.escape(sm.node.main.osDetails.os.kernelName)}</li>
| <li><b>Name:</b> ${xml.Utility.escape(S.?("os.name." + sm.node.main.osDetails.os.name))}</li>
| <li><b>Version:</b> ${xml.Utility.escape(sm.node.main.osDetails.version.value)}</li>
| <li><b>Service pack:</b> ${xml.Utility.escape(sm.node.main.osDetails.servicePack.getOrElse("None"))}</li>
| <li><b>Architecture:</b> ${xml.Utility.escape(sm.node.archDescription.getOrElse("None"))}</li>
| <li><b>Kernel version:</b> ${xml.Utility.escape(sm.node.main.osDetails.kernelVersion.value)}</li>
| </ul>
|</div>""".stripMargin.replaceAll("\n", " ")
}
val machineTooltip: String = {
s"""
|<h4>Machine details</h4>
|<div class='tooltip-content'>
| <ul>
| <li><b>Type:</b> ${displayMachineType(sm.machine)}</li>
| <li><b>Total physical memory (RAM):</b> ${xml.Utility.escape(
sm.node.ram.map(_.toStringMo).getOrElse("-")
)}</li>
| <li><b>Manufacturer:</b> ${xml.Utility.escape(
sm.machine.flatMap(x => x.manufacturer).map(x => x.name).getOrElse("-")
)}</li>
| <li><b>Total swap space:</b> ${xml.Utility.escape(sm.node.swap.map(_.toStringMo).getOrElse("-"))}</li>
| <li><b>System serial number:</b> ${xml.Utility.escape(
sm.machine.flatMap(x => x.systemSerialNumber).getOrElse("-")
)}</li>
| <li><b>Time zone:</b> ${xml.Utility.escape(
sm.node.timezone
.map(x => if (x.name.toLowerCase == "utc") "UTC" else s"${x.name} (UTC ${x.offset})")
.getOrElse("unknown")
)}</li>
| <li>${sm.machine
.map(_.id.value)
.map(machineId => "<b>Machine ID:</b> " ++ { xml.Utility.escape(machineId) })
.getOrElse("<span class='error'>Machine Information are missing for that node</span>")}</li>
| </ul>
|</div>
|""".stripMargin.replaceAll("\n", " ")
}

configService.rudder_global_policy_mode().toBox match {
case Full(globalMode) =>
bindNode(node, sm, withinPopup, globalMode) ++ Script(
DisplayNode.jsInit(node.id, sm.node.softwareIds, "") &
JsRaw(s"""
$$('#nodeHostname').html("${xml.Utility.escape(sm.node.main.hostname)}");
// Header info
$$('#nodeHeaderLogo').attr("class", "${osIcon}").attr("title","${osTooltip}");
$$('#nodeHeaderState').attr("class", "node-state ${getNodeState(
node.state
).toLowerCase}").attr("title", "${getNodeState(node.state)}");
$$('#nodeHeaderHostname').html("${xml.Utility.escape(sm.node.main.hostname)}");
$$('#nodeHeaderId').html("${xml.Utility.escape(sm.node.main.id.value)}");
$$('.header-subtitle .clipboard').attr("data-clipboard-text", "${xml.Utility.escape(sm.node.main.id.value)}");
$$('#nodeHeaderOsName').html("${xml.Utility.escape(sm.node.main.osDetails.fullName)}");
$$('#nodeHeaderOsRam').html("${xml.Utility.escape(sm.node.ram.map(_.toStringMo).getOrElse("-"))}");
$$('#nodeHeaderOsInfo').attr("title", "${machineTooltip}");
$$( "#${detailsId}" ).tabs({ active : ${tab} } );
$$('#nodeInventory .ui-tabs-vertical .ui-tabs-nav li a').on('click',function(){
var tab = $$(this).attr('href');
Expand All @@ -275,6 +334,7 @@ class ShowNodeDetailsFromNode(
$$('#nodeInventory > .sInventory > .sInventory').hide();
$$(tab).show();
});
new ClipboardJS('[data-clipboard-text]');
""") &
buildJsTree(groupTreeId)
)
Expand Down
Expand Up @@ -429,79 +429,9 @@ object DisplayNode extends Loggable {
case _ => NodeSeq.Empty
}
}
val osIcon = sm.node.main.osDetails.os.name.toLowerCase();

val osTooltip: String = {
s"""
<h4>Operating system details</h4>
<div class="tooltip-content">
<ul>
<li><b>Type:</b> ${escape(sm.node.main.osDetails.os.kernelName)}</li>
<li><b>Name:</b> ${escape(S.?("os.name." + sm.node.main.osDetails.os.name))}</li>
<li><b>Version:</b> ${escape(sm.node.main.osDetails.version.value)}</li>
<li><b>Service pack:</b> ${escape(sm.node.main.osDetails.servicePack.getOrElse("None"))}</li>
<li><b>Architecture:</b> ${escape(sm.node.archDescription.getOrElse("None"))}</li>
<li><b>Kernel version:</b> ${escape(sm.node.main.osDetails.kernelVersion.value)}</li>
</ul>
</div>
"""
}
val machineTooltip: String = {
s"""
<h4>Operating system details</h4>
<div class="tooltip-content">
<ul>
<li><b>Total physical memory (RAM):</b> ${escape(sm.node.ram.map(_.toStringMo).getOrElse("-"))}</li>
<li><b>Manufacturer:</b> ${escape(sm.machine.flatMap(x => x.manufacturer).map(x => x.name).getOrElse("-"))}</li>
<li><b>Total swap space:</b> ${escape(sm.node.swap.map(_.toStringMo).getOrElse("-"))}</li>
<li><b>System serial number:</b> ${escape(sm.machine.flatMap(x => x.systemSerialNumber).getOrElse("-"))}</li>
<li><b>Time zone:</b>
${escape(
sm.node.timezone
.map(x => if (x.name.toLowerCase == "utc") "UTC" else s"${x.name} (UTC ${x.offset})")
.getOrElse("unknown")
)}
</li>
<li>
${sm.machine
.map(_.id.value)
.map(machineId => "<b>Machine ID:</b> " ++ { escape(machineId) })
.getOrElse("""<span class="error">Machine Information are missing for that node</span>""")}
</li>
</ul>
</div>
"""
}

<div id="nodeDetails">
<div class="id-card node">
<div class={"card-img " ++ osIcon}></div>
<div class="card-info">
<div><label>Hostname: </label>{sm.node.main.hostname}{
nodeAndGlobalMode match {
case Some((n, _)) => <span class={"node-state " ++ getNodeState(n.state).toLowerCase}></span>
case None => NodeSeq.Empty
}
}
</div>
<div><label>Node ID: </label>{sm.node.main.id.value}</div>
<div><label>Operating system: </label>{
escape(sm.node.main.osDetails.fullName)
}<span class="glyphicon glyphicon-info-sign icon-info" data-bs-toggle="tooltip" data-bs-placement="right" title={
osTooltip
}></span></div>
<div>
<label>Machine: </label>{displayMachineType(sm.machine)}
<span class="machine-info ram">{sm.node.ram.map(_.toStringMo).getOrElse("-")}</span>
<span class="glyphicon glyphicon-info-sign icon-info" data-bs-toggle="tooltip" data-bs-placement="right" title={
machineTooltip
}></span>
</div>
</div>
</div>

<div class="row">

<div class="rudder-info col-lg-6 col-sm-7 col-xs-12">
<h3>Rudder information</h3>
<div>
Expand Down Expand Up @@ -679,7 +609,7 @@ object DisplayNode extends Loggable {
}
}

private def displayMachineType(opt: Option[MachineInventory]): NodeSeq = {
def displayMachineType(opt: Option[MachineInventory]): NodeSeq = {
opt match {
case None => NodeSeq.Empty
case Some(machine) => (
Expand Down Expand Up @@ -1195,7 +1125,7 @@ object DisplayNode extends Loggable {
}

import com.normation.rudder.domain.nodes.NodeState
private[this] def getNodeState(nodeState: NodeState): String = {
def getNodeState(nodeState: NodeState): String = {
S.?(s"node.states.${nodeState.name}")
}
}
Expand Up @@ -261,10 +261,15 @@ pre.json-beautify code.elmsh {
.content-wrapper .btn-default .fa,
.modal .btn-danger .fa,
.modal .btn-default .fa{
transition-duration: .2s;
color: #738195;
}
.content-wrapper .btn.btn-danger:hover .fa,
.modal .btn.btn-danger:hover .fa{
.modal .btn.btn-danger:hover .fa,
.content-wrapper .btn.btn-danger:active .fa,
.modal .btn.btn-danger:active .fa,
.content-wrapper .btn.btn-danger:focus .fa,
.modal .btn.btn-danger:focus .fa{
color: #fff;
}
.content-wrapper .dataTables_wrapper_top .btn-default,
Expand Down Expand Up @@ -907,6 +912,9 @@ form .tooltip-content p {
.tooltip > .tooltip-inner .tooltip-content p{
margin-bottom: 5px;
}
.tooltip > .tooltip-inner .tooltip-content > ul{
padding-left: 0;
}
.tooltip > .tooltip-inner .tooltip-content > ul:last-child,
.tooltip > .tooltip-inner .tooltip-content > p:last-child{
margin-bottom : 0;
Expand Down Expand Up @@ -3015,19 +3023,6 @@ table a > i.fa-pencil:hover{
margin-bottom: 15px;
display: flex;
}
.id-card .card-img {
width: 150px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
opacity: 0.5;
margin-left: -10px;
}
@media (max-width: 992px){
.id-card .card-img {
display: none !important
}
}
.id-card .card-info {
flex: auto;
}
Expand Down

0 comments on commit 3eed39b

Please sign in to comment.