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 bb85219
Show file tree
Hide file tree
Showing 12 changed files with 634 additions and 585 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,24 +95,6 @@ function refuseEnter(event)
}
}

/* portlet */

$(function() {

$(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix arrondis")
.find(".portlet-header")
.addClass("ui-widget-header")
.end()
.find(".portlet-content");

$(".portlet-header .ui-icon").click(function() {
$(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick");
$(this).parents(".portlet:first").find(".portlet-content").toggle();
});

});


/**
* Check all checkbox named name according to the status of the checkbox with id id
* @param id
Expand Down
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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}")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -279,12 +279,6 @@ class AcceptNode extends Loggable {
},
("class", "btn btn-danger")
)
& "servergrid-close" #>
SHtml.ajaxButton(
"Cancel",
() => JsRaw(" $('#confirmPopup')hideBsModal;$('#refusePopup')hideBsModal;"): JsCmd,
("class", "btn btn-default")
)
)(template)
)
case e: EmptyBox =>
Expand Down
Original file line number Diff line number Diff line change
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
Loading

0 comments on commit bb85219

Please sign in to comment.