mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-07 19:04:20 +00:00
42_npmjs: improved error handling
git-svn-id: https://svn.fhem.de/fhem/trunk@18551 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
7cdfe6bad2
commit
32fa778897
@ -39,7 +39,7 @@ use warnings;
|
|||||||
use POSIX;
|
use POSIX;
|
||||||
|
|
||||||
# our @EXPORT = qw(get_time_suffix);
|
# our @EXPORT = qw(get_time_suffix);
|
||||||
our $VERSION = "0.9.3";
|
our $VERSION = "v0.10.0";
|
||||||
|
|
||||||
# wird für den Import der FHEM Funktionen aus der fhem.pl benötigt
|
# wird für den Import der FHEM Funktionen aus der fhem.pl benötigt
|
||||||
use GPUtils qw(GP_Import);
|
use GPUtils qw(GP_Import);
|
||||||
@ -304,11 +304,18 @@ sub Get($$@) {
|
|||||||
return $ret;
|
return $ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
elsif ( $cmd eq 'nodejsVersion' ) {
|
elsif ( $cmd eq 'showWarningList' ) {
|
||||||
return "usage: $cmd" if ( @args != 0 );
|
return "usage: $cmd" if ( @args != 0 );
|
||||||
|
|
||||||
$hash->{".fhem"}{npm}{cmd} = 'getNodeVersion';
|
my $ret = CreateWarningList($hash);
|
||||||
AsynchronousExecuteNpmCommand($hash);
|
return $ret;
|
||||||
|
|
||||||
|
}
|
||||||
|
elsif ( $cmd eq 'showErrorList' ) {
|
||||||
|
return "usage: $cmd" if ( @args != 0 );
|
||||||
|
|
||||||
|
my $ret = CreateErrorList($hash);
|
||||||
|
return $ret;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my $list = "";
|
my $list = "";
|
||||||
@ -318,6 +325,12 @@ sub Get($$@) {
|
|||||||
$list .= " showUpdatedList:noArg"
|
$list .= " showUpdatedList:noArg"
|
||||||
if ( defined( $hash->{".fhem"}{npm}{updatedpackages} )
|
if ( defined( $hash->{".fhem"}{npm}{updatedpackages} )
|
||||||
and scalar keys %{ $hash->{".fhem"}{npm}{updatedpackages} } > 0 );
|
and scalar keys %{ $hash->{".fhem"}{npm}{updatedpackages} } > 0 );
|
||||||
|
$list .= " showWarningList:noArg"
|
||||||
|
if ( defined( $hash->{".fhem"}{npm}{'warnings'} )
|
||||||
|
and scalar @{ $hash->{".fhem"}{npm}{'warnings'} } > 0 );
|
||||||
|
$list .= " showErrorList:noArg"
|
||||||
|
if ( defined( $hash->{".fhem"}{npm}{'errors'} )
|
||||||
|
and scalar @{ $hash->{".fhem"}{npm}{'errors'} } > 0 );
|
||||||
|
|
||||||
return "Unknown argument $cmd, choose one of $list";
|
return "Unknown argument $cmd, choose one of $list";
|
||||||
}
|
}
|
||||||
@ -464,26 +477,45 @@ sub ExecuteNpmCommand($) {
|
|||||||
my $cmdPrefix = "";
|
my $cmdPrefix = "";
|
||||||
my $cmdSuffix = "";
|
my $cmdSuffix = "";
|
||||||
|
|
||||||
if ( $cmd->{host} ne 'localhost' ) {
|
if ( $cmd->{host} =~ /^(?:(.*)@)?(.+)$/ && lc($2) ne "localhost" ) {
|
||||||
$cmdPrefix = 'ssh ' . $cmd->{host} . ' \'';
|
|
||||||
$cmdSuffix = '\'';
|
# One-time action to add remote hosts key.
|
||||||
|
# If key changes, user will need to intervene
|
||||||
|
# and cleanup known_hosts file manually for security reasons
|
||||||
|
$cmdPrefix =
|
||||||
|
'KEY=$(ssh-keyscan -t ed25519 '
|
||||||
|
. $2
|
||||||
|
. ' 2>/dev/null); '
|
||||||
|
. 'grep -q -E "^${KEY% *}" ${HOME}/.ssh/known_hosts || echo "${KEY}" >> ${HOME}/.ssh/known_hosts; ';
|
||||||
|
$cmdPrefix .=
|
||||||
|
'KEY=$(ssh-keyscan -t rsa '
|
||||||
|
. $2
|
||||||
|
. ' 2>/dev/null); '
|
||||||
|
. 'grep -q -E "^${KEY% *}" ${HOME}/.ssh/known_hosts || echo "${KEY}" >> ${HOME}/.ssh/known_hosts; ';
|
||||||
|
|
||||||
|
# wrap SSH command
|
||||||
|
$cmdPrefix .= 'ssh -oBatchMode=yes ' . $cmd->{host} . ' \'';
|
||||||
|
$cmdSuffix = '\' 2>&1';
|
||||||
}
|
}
|
||||||
|
|
||||||
$npm->{nodejsversion} = $cmdPrefix . 'echo n | node --version' . $cmdSuffix;
|
$npm->{nodejsversion} =
|
||||||
|
$cmdPrefix . 'echo n | node --version 2>&1' . $cmdSuffix;
|
||||||
if ( $cmd->{npmglobal} == 0 ) {
|
if ( $cmd->{npmglobal} == 0 ) {
|
||||||
$npm->{npmupdate} =
|
$npm->{npmupdate} =
|
||||||
$cmdPrefix . 'echo n | npm update --unsafe-perm' . $cmdSuffix;
|
$cmdPrefix . 'echo n | npm update --unsafe-perm 2>&1' . $cmdSuffix;
|
||||||
$npm->{npmoutdated} =
|
$npm->{npmoutdated} =
|
||||||
$cmdPrefix
|
$cmdPrefix
|
||||||
. 'echo n | node --version; npm outdated --parseable'
|
. 'echo n | node --version && npm outdated --parseable 2>&1'
|
||||||
. $cmdSuffix;
|
. $cmdSuffix;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$npm->{npmupdate} =
|
$npm->{npmupdate} =
|
||||||
$cmdPrefix . 'echo n | sudo -n npm update -g --unsafe-perm' . $cmdSuffix;
|
$cmdPrefix
|
||||||
|
. 'echo n | sudo -n npm update -g --unsafe-perm 2>&1'
|
||||||
|
. $cmdSuffix;
|
||||||
$npm->{npmoutdated} =
|
$npm->{npmoutdated} =
|
||||||
$cmdPrefix
|
$cmdPrefix
|
||||||
. 'echo n | node --version; sudo -n npm outdated -g --parseable'
|
. 'echo n | node --version && sudo -n npm outdated -g --parseable 2>&1'
|
||||||
. $cmdSuffix;
|
. $cmdSuffix;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -507,13 +539,13 @@ sub GetNodeVersion($) {
|
|||||||
my $cmd = shift;
|
my $cmd = shift;
|
||||||
|
|
||||||
my $update = {};
|
my $update = {};
|
||||||
my $v = `$cmd->{nodejsversion} 2>/dev/null`;
|
my $v = `$cmd->{nodejsversion}`;
|
||||||
|
|
||||||
if ( defined($v) and $v =~ /^v(\d+\.\d+\.\d+)/ ) {
|
if ( defined($v) and $v =~ /^v(\d+\.\d+\.\d+)/ ) {
|
||||||
$update->{nodejsversion} = $1;
|
$update->{nodejsversion} = $1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$update->{error} = 'Node.js not installed';
|
push @{ $update->{error} }, {message => $v};
|
||||||
}
|
}
|
||||||
|
|
||||||
return $update;
|
return $update;
|
||||||
@ -668,7 +700,82 @@ sub WriteReadings($$) {
|
|||||||
readingsEndUpdate( $hash, 1 );
|
readingsEndUpdate( $hash, 1 );
|
||||||
|
|
||||||
ProcessUpdateTimer($hash)
|
ProcessUpdateTimer($hash)
|
||||||
if ( $hash->{".fhem"}{npm}{cmd} eq 'getNodeVersion' );
|
if ( $hash->{".fhem"}{npm}{cmd} eq 'getNodeVersion'
|
||||||
|
&& !defined( $decode_json->{error} ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub CreateWarningList($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
|
||||||
|
my $warnings = $hash->{".fhem"}{npm}{'warnings'};
|
||||||
|
|
||||||
|
my $ret = '<html><table><tr><td>';
|
||||||
|
$ret .= '<table class="block wide">';
|
||||||
|
$ret .= '<tr class="even">';
|
||||||
|
$ret .= "<td><b>Warning List</b></td>";
|
||||||
|
$ret .= "<td></td>";
|
||||||
|
$ret .= '</tr>';
|
||||||
|
|
||||||
|
if ( ref($warnings) eq "ARRAY" ) {
|
||||||
|
|
||||||
|
my $linecount = 1;
|
||||||
|
foreach my $warning ( @{$warnings} ) {
|
||||||
|
if ( $linecount % 2 == 0 ) {
|
||||||
|
$ret .= '<tr class="even">';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$ret .= '<tr class="odd">';
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= "<td>$warning->{message}</td>";
|
||||||
|
|
||||||
|
$ret .= '</tr>';
|
||||||
|
$linecount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= '</table></td></tr>';
|
||||||
|
$ret .= '</table></html>';
|
||||||
|
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub CreateErrorList($) {
|
||||||
|
|
||||||
|
my $hash = shift;
|
||||||
|
|
||||||
|
my $errors = $hash->{".fhem"}{npm}{'errors'};
|
||||||
|
|
||||||
|
my $ret = '<html><table><tr><td>';
|
||||||
|
$ret .= '<table class="block wide">';
|
||||||
|
$ret .= '<tr class="even">';
|
||||||
|
$ret .= "<td><b>Error List</b></td>";
|
||||||
|
$ret .= "<td></td>";
|
||||||
|
$ret .= '</tr>';
|
||||||
|
|
||||||
|
if ( ref($errors) eq "ARRAY" ) {
|
||||||
|
|
||||||
|
my $linecount = 1;
|
||||||
|
foreach my $error ( @{$errors} ) {
|
||||||
|
if ( $linecount % 2 == 0 ) {
|
||||||
|
$ret .= '<tr class="even">';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$ret .= '<tr class="odd">';
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= "<td>$error->{message}</td>";
|
||||||
|
|
||||||
|
$ret .= '</tr>';
|
||||||
|
$linecount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$ret .= '</table></td></tr>';
|
||||||
|
$ret .= '</table></html>';
|
||||||
|
|
||||||
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub CreateUpgradeList($$) {
|
sub CreateUpgradeList($$) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user