From e720c04efdce3ec8dd8e726db22d5eebb47cb016 Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Fri, 2 Sep 2016 11:57:16 +0200 Subject: [PATCH 1/2] [nodejs] new plugin: get runtime info Resolves: #847. Signed-off-by: Tomas Tomecek Signed-off-by: Pavel Moravec --- sos/plugins/nodejs.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 sos/plugins/nodejs.py diff --git a/sos/plugins/nodejs.py b/sos/plugins/nodejs.py new file mode 100644 index 0000000..3585ec9 --- /dev/null +++ b/sos/plugins/nodejs.py @@ -0,0 +1,43 @@ +# Copyright (C) 2016 Red Hat, Inc., Tomas Tomecek + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin, \ + SuSEPlugin + + +class NodeJS(Plugin, RedHatPlugin, SuSEPlugin): + """ Get runtime version of NodeJS """ + + plugin_name = 'nodejs' + profiles = ('system',) + + packages = ('nodejs',) + + def setup(self): + # we could get much more info with: + # p = require("process"); console.log(p) + # unfortunately 'process' module is not available on 0.10 + self.add_cmd_output("node -v", suggest_filename="nodejs-version") + + +class NodeJSUbuntu(NodeJS, UbuntuPlugin, DebianPlugin): + """ + Ubuntu/Debian require nodejs-legacy package in order to + have a node executable + """ + packages = ('nodejs', 'nodejs-legacy') + +# vim: set et ts=4 sw=4 : -- 2.4.11 From 470f62c658b37e1691cb87472a15880e9e4596a2 Mon Sep 17 00:00:00 2001 From: Pavel Moravec Date: Fri, 2 Sep 2016 11:59:04 +0200 Subject: [PATCH 2/2] [npm] new plugin: get project modules and globally installed modules New module for package manager npm for Node.js. The plugin collects list of globally installed modules and project modules. Resolves: #846. Signed-off-by: Tomas Tomecek Signed-off-by: Pavel Moravec --- sos/plugins/npm.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 sos/plugins/npm.py diff --git a/sos/plugins/npm.py b/sos/plugins/npm.py new file mode 100644 index 0000000..77464c2 --- /dev/null +++ b/sos/plugins/npm.py @@ -0,0 +1,68 @@ +# Copyright (C) 2016 Red Hat, Inc., Tomas Tomecek + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +import os + +from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin, \ + SuSEPlugin + + +class Npm(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin, SuSEPlugin): + """ + Get info about available npm modules + """ + + requires_root = False + plugin_name = 'npm' + profiles = ('system',) + option_list = [("project_path", + 'List npm modules of a project specified by path', + 'fast', + 0)] + + # in Fedora, Debian, Ubuntu and Suse the package is called npm + packages = ('npm',) + + def _get_npm_output(self, cmd, filename, working_directory=None): + # stderr output is already part of the json, key "problems" + self.add_cmd_output( + cmd, + suggest_filename=filename, + stderr=False, + runat=working_directory + ) + + def setup(self): + if self.get_option("project_path") != 0: + project_path = os.path.abspath(os.path.expanduser( + self.get_option("project_path"))) + self._get_npm_output("npm ls --json", "npm-ls-project", + working_directory=project_path) + self._get_npm_output("npm ls -g --json", "npm-ls-global") + + +class NpmViaNodeJS(Npm): + """ + some distribution methods don't provide 'npm' via npm package + """ + + # upstream doesn't have an npm package, it's just nodejs + # also in Fedora 24+ it is just nodejs, no npm package + packages = ('nodejs', ) + +# TODO: in RHEL npm and nodejs is available via software collections +# this should be handled separately + +# vim: set et ts=4 sw=4 : -- 2.4.11