Autor Thema: [98_version.pm] patch für optionalen parameter "noheader"  (Gelesen 817 mal)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 12730
  • Probleme sind auch keine Lösung.
Hallo Markus,

ich hätte da einen kleinen Vorschlag zum version-Befehl, mit dem man durch Angabe von "noheader" beim Aufruf die Ausgabe der Überschrift samt der ihr folgenden Leerzeile unterdrücken kann. Damit kann man eine einfach zu parsende Rückgabe als Ergebnis von CommandVersion() bekommen.

Index: 98_version.pm
===================================================================
--- 98_version.pm (Revision 10655)
+++ 98_version.pm (Arbeitskopie)
@@ -16,6 +16,8 @@
 {
   my ($cl, $param) = @_;
 
+  my $noheader = ($param =~ s/ *noheader//);
+
   my @ret;
   my $max = 0;
   my $modpath = (exists($attr{global}{modpath}) ? $attr{global}{modpath} : "");
@@ -55,7 +57,9 @@
   @ret = map {/\$Id\: (\S+) (\S+) (.+?) \$/ ? sprintf("%-".$max."s %5d %s",$1,$2,$3) : $_} @ret;
   @ret = sort {version_sortModules($a, $b)} grep {(defined($param) ? $_ =~ /$param/ : 1)} @ret;
   return "no loaded modules found that match: $param" if($param && !@ret);
-  return sprintf("%-".$max."s %s","File","Rev   Last Change\n\n").
+
+  my $header = $noheader ? "" : sprintf("%-".$max."s %s","File","Rev   Last Change\n\n");
+  return $header.
          trim(join("\n",  grep (($_ =~ /^fhem.pl|\d\d_/), @ret))."\n\n".
               join("\n",  grep (($_ !~ /^fhem.pl|\d\d_/), @ret))
              );

Wenn das so eingebaut wird, kommt mein nächster Patch (für 98_fheminfo.pm), mit dem man folgende Ausgabe bekommt:

(http://up.picr.de/24426358so.png)
« Letzte Änderung: 29 Januar 2016, 13:52:10 von betateilchen »
Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieses Beitrages.

Offline Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 2934
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #1 am: 29 Januar 2016, 17:12:16 »
Hallo Udo,

hab deinen Patch leicht verändert eingecheckt. Der optionale Parameter "noheader" darf nur am Ende stehen. In deinem Fall kann man nun folgenden Aufruf durchführen:

fhem> version fhem.pl noheader
fhem.pl 10639 2016-01-26 07:27:14Z rudolfkoenig
fhem>

Hab das ganze samt Doku-Ergänzung eingecheckt.

Wollte dich eh schonmal fragen, wie es mit fheminfo ausschaut? Wegen dem Datenbankformat und der Änderung zur Aufnahme der einzelnen Models pro Modul.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 12730
  • Probleme sind auch keine Lösung.
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #2 am: 28 Februar 2017, 17:31:57 »
Hallo Markus,

wenn Du mal Zeit hast: könnte man die Ausgabe von version dahingehend erweitern, dass man auch die von FHEMWEB geladenen js-Dateien mit anzeigt, die eine $Id$ besitzen? Und bitte nur die mit einer Id.

Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieses Beitrages.

Offline Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 2934
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #3 am: 28 Februar 2017, 18:26:43 »
Daran hatte ich auch schon gedacht. Werde ich bei Gelegenheit angehen.

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 12730
  • Probleme sind auch keine Lösung.
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #4 am: 28 Februar 2017, 18:27:26 »
Bin da draufgekommen, weil die heute morgen in SVN eingecheckte Version von fhemweb.js kaputt ist  und ich lange gebraucht habe, um festzustellen, woran es lag 8)
« Letzte Änderung: 28 Februar 2017, 18:42:26 von betateilchen »
Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieses Beitrages.

Offline Markus Bloch

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 2934
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #5 am: 01 März 2017, 21:08:29 »
Hallo Udo,

ich habe mir mal @FW_fhemwebjs angeschaut. Es enthält eine statische Liste aller Dateien die auf fhemweb*.js passen. Also:

$VAR1 = [
          'fhemweb.js',
          'fhemweb_colorpicker.js',
          'fhemweb_fbcalllist.js',
          'fhemweb_knob.js',
          'fhemweb_readingsGroup.js',
          'fhemweb_readingsHistory.js',
          'fhemweb_sortable.js',
          'fhemweb_uzsu.js',
          'fhemweb_weekprofile.js'
        ];

Im Rahmen von der Funktion FW_answerCall() wird %jsNeg und @jsList erzeugt basierend auf @FW_fhemwebjs, sowie dem Attribut JavaScripts. Damit wird die tatsächlich verwendete JS-Liste bei jeder HTTP-Antwort frisch erzeugt und steht so nicht global zur Verfügung um bspw. in version darauf zugreifen zu können. Man kann also nicht die tatsächlich verwendeten JS-Dateien in version ermitteln, weswegen ich das einlesen aller *.js-Dateien in "$FW_dir/pgm2" bevorzuge um alle JS-Dateien zu berücksichtigen die $Id$ gesetzt haben.

Ein beispielhaftes "version .js" sieht bei mir damit so aus:

File                       Rev   Last Change

fhemweb.js                 13392 2017-02-11 18:32:13Z rudolfkoenig
fhemweb_colorpicker.js     13107 2017-01-16 13:14:31Z justme1968
fhemweb_fbcalllist.js       9346 2015-10-02 19:30:04Z markusbloch
fhemweb_readingsGroup.js   13107 2017-01-16 13:14:31Z justme1968
fhemweb_readingsHistory.js 13107 2017-01-16 13:14:31Z justme1968
fhemweb_sortable.js        11261 2016-04-17 09:36:23Z markusbloch
fhemweb_uzsu.js            13107 2017-01-16 13:14:31Z justme1968
fhemweb_weekprofile.js     13277 2017-01-29 18:38:12Z Risiko
sorttable.js               13106 2017-01-16 13:12:53Z justme1968

Würde man alle JS-Dateien anzeigen (auch die, ohne $Id$) so sieht die Ausgabe für den selben Befehl folgendermaßen aus:

File                       Rev   Last Change

No Id found for alarm.js
No Id found for console.js
No Id found for dashboard.js
No Id found for fhemdoc_modular.js
fhemweb.js                 13392 2017-02-11 18:32:13Z rudolfkoenig
fhemweb_colorpicker.js     13107 2017-01-16 13:14:31Z justme1968
fhemweb_fbcalllist.js       9346 2015-10-02 19:30:04Z markusbloch
No Id found for fhemweb_knob.js
fhemweb_readingsGroup.js   13107 2017-01-16 13:14:31Z justme1968
fhemweb_readingsHistory.js 13107 2017-01-16 13:14:31Z justme1968
fhemweb_sortable.js        11261 2016-04-17 09:36:23Z markusbloch
fhemweb_uzsu.js            13107 2017-01-16 13:14:31Z justme1968
fhemweb_weekprofile.js     13277 2017-01-29 18:38:12Z Risiko
No Id found for floorplan_click.js
No Id found for floorplan_drag.js
No Id found for ios6.js
No Id found for jquery-ui.min.js
No Id found for jquery.knob.min.js
No Id found for jquery.min.js
No Id found for jquery.vticker.min.js
No Id found for RSS.js
sorttable.js               13106 2017-01-16 13:12:53Z justme1968
No Id found for svg.js
No Id found for zwave_neighborlist.js

Da das mir durchaus zu viel ist, bin ich ebenfalls für das ausblenden von JS-Dateien ohne $Id$.

Was meinst Du?

Gruß
Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 12730
  • Probleme sind auch keine Lösung.
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #6 am: 02 März 2017, 09:37:59 »
Gefällt mir nicht. Da wird viel zuviel angezeigt, was im Fehlerfall nicht intererssiert.

In 55_InfoPanel.pm habe ich etwas ähnliches gebaut, nämlich dass für das InfoPanel selbst bestimmte .js Dateien eingebunden werden, wenn sie in der FHEMWEB Instanz vorhanden sind.

sub btIP_getScript {
  my ($name) = shift;
  return "" if AttrVal($name,'noscript',0);

  my $scripts= "";
  my $jsTemplate = '<script type="text/javascript" src="%s"></script>';
  if(defined($data{FWEXT})) {
    foreach my $k (sort keys %{$data{FWEXT}}) {
      my $h = $data{FWEXT}{$k};
      next if($h !~ m/HASH/ || !$h->{SCRIPT});
      my $script = $h->{SCRIPT};
         $script = ($script =~ m,^/,) ? "$FW_ME$script" : "$FW_ME/pgm2/$script" unless ($script =~ m,^http,);
      $scripts .= sprintf($jsTemplate, $script);
    }
  }
#  $scripts .= sprintf($jsTemplate,"/fhem/pgm2/cordova-2.3.0.js");
#  $scripts .= sprintf($jsTemplate,"/fhem/pgm2/webviewcontrol.js");
  $scripts .= sprintf($jsTemplate,"/fhem/pgm2/fhemweb.js");
  $scripts =~ s/script>/script>\n/g;
  return $scripts;
}
Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieses Beitrages.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 15689
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #7 am: 02 März 2017, 10:50:48 »
Ich habe meine .js Dateien mit "// $Id:$" versehen.

Weiterhin habe ich in fhemweb.js die Variable version entfernt, samt Ausgabe, da sie mich mit fhemweb_uzsu.js verwirrt hat: andre hat version auch in seinen .js Dateien definiert, und die Letzte hat gewonnen.

Ich bin dafuer, dass der FHEM-Befehl version auch die .js Dateien mit $Id anzeigt (via Option?), das ist aber eine Meinung und kein Befehl :)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 12730
  • Probleme sind auch keine Lösung.
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #8 am: 02 März 2017, 11:11:49 »
Ich bin dafuer, dass der FHEM-Befehl version auch die .js Dateien mit $Id anzeigt

Da sind wir uns ja einig. Aber bitte nur die, die auch in Verwendung sind.
Es werden schließlich auch nur die Module angezeigt, die geladen sind.
Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieses Beitrages.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 15689
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #9 am: 02 März 2017, 11:30:40 »
Zitat
Aber bitte nur die, die auch in Verwendung sind.
Das ist leider nicht trivial. Selbst wenn FHEMWEB die "selbst eingebauten" .js per Variable zur Verfuegung stellt, koennen andere Module (wie z.Bsp. ZWDongle) was nachladen.

Vorschlag: wen man "version" im Browser eintippt, dann wird version mit einer Liste von .js Dateien aufgerufen, und diese werden zusaetzlich nach $Id durchgesucht. Nachteil: FTUI oder vgl. wird damit nicht abgedeckt.


Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15727
[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #10 am: 02 März 2017, 11:44:01 »
die version variable sollte eigentlich jeweils file lokal sein. seltsam... arg... zu viel c gedacht. geht mit js natürlich so nicht. alles was nicht local in einer funktion ist wird global...

ich ändere es auch auf //.

die // variante kommt nur eider nicht mehr per js code an die version sondern nur noch per parsen des files. damit kann man alte versionen im browser cache nicht mehr identifizieren.

vorschlag zur anzeige: wie wäre es wenn man tatsächlich im jeweils aktuellen browser fenster nachfragt und die version der tatsächlich per loadscript geladenen js files dort abholt? d.h. das version kommando müsste über $hash->{CL} mit fhemweb.js kommunizieren. das sollte aber möglich sein.

ftui ist sowieso außen vor da man dort das version kommando nicht verwenden kann und auch überhaupt kein fhemweb js code geladen wird.
« Letzte Änderung: 02 März 2017, 11:58:49 von justme1968 »
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 15689
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #11 am: 02 März 2017, 11:58:21 »
Zitat
vorschlag zur anzeige:
Ist ungefaehr das, was ich vorgeschlagen habe, nur andersherum. Mein Vorschlag waere in version.pm einfacher zu implementieren, und ist ungefaehrlicher, wenn deine Aussage zu FTUI stimmt, da FTUI auch ueber FHEMWEB mit FHEM kommuniziert.

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 15689
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #12 am: 02 März 2017, 12:05:48 »
Zitat
damit kann man alte versionen im browser cache nicht mehr identifizieren.
Das ist ein valider Punkt, und spricht dafuer, dass man $Id:$ irgendwo sammelt.

Nochn Vorschlag: es gibt ein "var FW_version = {};" in fhemweb.js, und da schreibt jedes Modul beim Laden sich rein mit
FW_version["fhemweb.js"] = "$Id:$";
Wenn man in FHEMWEB "version" eingibt, dann wird das zusaetzlich ausgegeben. version.pm muss nicht modifiziert werden. Alle anderen Frontends muessen diese Funktionalitaet selbst implementieren.

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15727
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #13 am: 02 März 2017, 12:12:33 »
klingt gut.
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 12730
  • Probleme sind auch keine Lösung.
Antw:[98_version.pm] patch für optionalen parameter "noheader"
« Antwort #14 am: 02 März 2017, 12:26:30 »
Sehr gute Alternative.
Aus technischen Gründen befindet sich die Signatur auf der Rückseite dieses Beitrages.