Powershell lekérdezés eredménye böngésző grafikonban

Powershell lekérdezés eredménye böngésző grafikonban
2019-07-08T16:48:20+02:00
2019-08-05T10:32:45+02:00
2022-12-06T02:25:36+01:00
hcsa
Sziasztok!

Következő a kínom:

Egy szerver egy bizonyos portjának állapotát kell folyamatosan (5 percenként) lekérdeznem, és ezt megjeleníteni böngészőben, folyamatosan inkrementálisan frissülő grafikonon.

Maga a lekérdezés annyiban gond, hogy a Powershell script csak a szerveren futhat, nem remote, mondjuk (számomra) ez a legkönnyebb része. Viszont a grafikon máshol (másik gép képernyőjén) kell megjelenjen. Találkoztam  a "JavaScript Charts" témával, és talán ez lenne a leginkább megvalósítható, de nem vagyok otthon a Javascriptben.

Próbálkoztam azzal, hogy a Powershell lekérdezés outputja egy .html fájlba kerül, az adatok szépen meg is jelennek a böngészőben, de hogyan lesz ebből grafikon?  Aztán megpróbáltam, hogy az output egy .txt fájl legyen, és azt olvassa be önfrissítéssel egy grafikonkészítő, de ezzel is felsültem.

Előre is köszönöm az ötleteket.
Mutasd a teljes hozzászólást!

  • Háát, pedig szerintem a legegyszerűbb megoldás a js lenne! Ha a powershell megy, néhány nap alatt, ha mást nem, kis hajtépéssel, de összetudnál rakni egy js grafikont (kövesd a dokumentációt, ha valami nem megy, prog.hu vagy google:{your problem} javascript (or jquery) stackoverflow):

    chartjs.org/docs/getting-started


    Csomagkezelőt nem használsz gondolom, de itt:(chartjs.org/docs/getting-started/installation) a lap alján megtalálod a fájlokat is, letudod tölteni, és hagyományosan linkelni az adott oldalra.

    (Am a napokban én is pont dolgozom majd ezzel, lehet bedobok ide valami patternt, egy kis leírással, amikor végeztem)
    Mutasd a teljes hozzászólást!
  • Szia hcsa!

    Én azt csinálnám a helyedben, hogy a PS-ből az eredményeket betolnám egy DB-be, vagy ha nincs lehetőség web szerver&DB szerver futtatására, akkor mondjuk egy JSON file-ba. A JSON file-ból a böngésző pedig ki tudja olvasni.
    Mutasd a teljes hozzászólást!
  • HA csak az utolsó n darab értéket kell kiírni, akkor jó a szövegfájlban adattárolás, bár egy külön fájlban elraknám az adatokat, a legrégebbit lekapnám a sor elejéről, és a végére tenném az újat, és egy másik lépésben az adatokból generálnék html-t.
    DE, ha kell neked időben lépegetni, vagy napi, heti, havi bontásban kirajzolni, akkor célszerűbb adatbázisba tolni az adatokat, mert a tárolás és lekérdezés könnyebb.

    A chartos cuccok-nak van bemeneti formátuma, ha json, akkor azt, ha egy js tömb akkor azt kell csinálnod az adataidból. A legegyszerűbb, ha már megjelentek html-ben az adatok, egy js tömbbe rakni őket rögtön. De persze rögtön két tömb kell, egy az időnek, egy az értéknek, ha szépen akarod.

    És ha 5 percenként kérdezed le, akkor naponta 288 mérési pontod lesz, az évente 105 120 db!
    Szóval számít, hogy kell-e időben visszafelé is megjeleníteni vagy sem. Bár 100K elemet azért még megeszik a javascript, csak lassulni fog a kijelzés. LEhet minden napra másik html-t generálni, aztán klikkelgessen a user ha a múlt érdekli.
    A szőrdög a részletekben lakik, ettől is függ hogy érdemes tárolni az adataidat!
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Köszönöm az eddigi hozzászólásokat!

    Sikerült eljutnom valameddig.
    A powershell lekérdezés így néz ki (közben kissé változtak az igények):

    # $CPULoad = (Get-WmiObject -computer 1.2.3.4 -class win32_processor | Measure-Object -property LoadPercentage -Average | Select Average).Average | Out-File V:\Diagramm\CPU.txt
    $CPULoad = (Get-WmiObject -computer 1.2.3.4 -class win32_processor | Measure-Object -property LoadPercentage -Average | Select Average).Average
    $CPULoad | ConvertTo-Json | Out-File V:\Diagramm\CPU.json

    # Get-WMIObject Win32_Process -computer 1.2.3.4 | Where-Object{$_.Name -like "Service.exe"} | % {$_.WS/1MB} | Out-File V:\Diagramm\Memory.txt
    $Memory = Get-WMIObject Win32_Process -computer 1.2.3.4 | Where-Object{$_.Name -like "Service.exe"} | % {$_.WS/1MB}
    $Memory | ConvertTo-Json | Out-File V:\Diagramm\Memory.json

    # Get-NetTCPConnection | Where-Object { $_.LocalAddress -eq "1.2.3.4" -and $_.LocalPort -eq "50550"} | Select-Object LocalAddress, LocalPort | Measure-Object | % {$_.Count} | Out-File V:\Diagramm\PortConnection.txt
    $Portonnection = Get-NetTCPConnection | Where-Object { $_.LocalAddress -eq "1.2.3.4" -and $_.LocalPort -eq "65054"} | Select-Object LocalAddress, LocalPort | Measure-Object | % {$_.Count}  
    $PortConnection | ConvertTo-Json | Out-File V:\Diagramm\PortConnection.json

    Ami érdekes, hogy akár .txt fájlba, akár .json fájlba teszem ki az eredményt, mindig ugyanaz a kinézet.
    ----------------------------------------------------
    A HTML/Javascript kódban odáig jutottam el, hogy kézzel kitöltött adatokból már van diagramm, most kellene vhogy beolvasni fájlokból és generáltatni. Csak elfogyott az ötlet. (Canvas.js-t használok, de úgy látom, mindegy melyiket választanám.):
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset = "UTF-8">
      <script type="text/javascript">
      window.onload = function () {
        var chart = new CanvasJS.Chart("chartContainer", {            
          title:{
            text: "Server Állapot"              
          },

          data: [  //maga az adattömb, kézzel kitöltve
          {
           type: "bar",
           dataPoints: [
           { label: "CPU %", y: 18 },
           { label: "Memory MB", y: 150 },
           { label: "Port Connections", y: 2 },                                    
           ]
         },
        ]
      });

        chart.render();
      }
      </script>
      <script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
    </head>
    <body>
      <div id="chartContainer" style="height: 100%px; width: 100%;">
      </div>
    </body>
    </html>
    Mutasd a teljes hozzászólást!
  • Ha van szerver oldali szkriptfuttatási lehetőséged, akkor nagyon egyszerű pl php val
    PHP: file_get_contents - Manual

    Ha nincs ilyenre lehetőség, akkor a powershellel kell a végső html-t legenerálni, benne az adatokkal.

    a legegyszerúbb módja: 3 fájl összemásolása egybe:
    HTML eleje, adatok, HTML vége.

    A legyegyszerűbb úgy megcsinálni, hogy amit kigenerálsz adatokat, ahhoz megírod a js-es feldolgozót először úgy, hogy kézzel belemásolod az adatokat. Ha megvan az így működő, akkor az adatok előtti rész lesz az eleje html az adatok utáni rész a végehtml, amit el kell menteni két fájlba.

    A scripted meg mindig a legújabb generált adatokkal másolja egybe őket.



    JSON -nál pl egy ilyen sor szedi ki az adatokat:

    var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');

    Akkor az első fálj vége:  var obj = JSON.parse('

    A vége eleje: ');  ...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd
Túl sok oldalt töltöttél le. Kérünk, gyere vissza később (30 perc múlva)!
Download limit reached. Please, come back later (in 30 minutes)!

Ha a böngésződ előtöltést használ, azt tiltsd le!
Disable browser prefetch!

Guru meditation: cba25ff5c230c93fe169f90366086d95