zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #24923
[Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
Chris Hillery has proposed merging lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module.
Requested reviews:
Zorba Coders (zorba-coders)
Related bugs:
Bug #1188058 in Zorba: "Update non-core module "system""
https://bugs.launchpad.net/zorba/+bug/1188058
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/bug-1188058/+merge/178905
--
https://code.launchpad.net/~zorba-coders/zorba/bug-1188058/+merge/178905
Your team Zorba Coders is requested to review the proposed merge of lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module.
=== modified file 'src/CMakeLists.txt'
--- src/CMakeLists.txt 2011-07-26 10:43:21 +0000
+++ src/CMakeLists.txt 2013-08-07 08:12:27 +0000
@@ -11,9 +11,4 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-
-# all external module libraries are generated in the directory
-# of the corresponding .xq file
-MESSAGE(STATUS "Add com")
-ADD_SUBDIRECTORY(com)
-MESSAGE(STATUS "End modules")
+DECLARE_ZORBA_MODULE (URI "http://zorba.io/modules/system" VERSION 1.0 FILE "system.xq")
=== removed directory 'src/com'
=== removed file 'src/com/CMakeLists.txt'
--- src/com/CMakeLists.txt 2011-10-06 08:19:44 +0000
+++ src/com/CMakeLists.txt 1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-# Copyright 2006-2008 The FLWOR Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-ADD_SUBDIRECTORY(zorba-xquery)
=== removed directory 'src/com/zorba-xquery'
=== removed file 'src/com/zorba-xquery/CMakeLists.txt'
--- src/com/zorba-xquery/CMakeLists.txt 2011-10-06 08:19:44 +0000
+++ src/com/zorba-xquery/CMakeLists.txt 1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-# Copyright 2006-2008 The FLWOR Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-ADD_SUBDIRECTORY(www)
=== removed directory 'src/com/zorba-xquery/www'
=== removed file 'src/com/zorba-xquery/www/CMakeLists.txt'
--- src/com/zorba-xquery/www/CMakeLists.txt 2011-10-06 08:19:44 +0000
+++ src/com/zorba-xquery/www/CMakeLists.txt 1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-# Copyright 2006-2008 The FLWOR Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-ADD_SUBDIRECTORY(modules)
=== removed directory 'src/com/zorba-xquery/www/modules'
=== removed file 'src/com/zorba-xquery/www/modules/CMakeLists.txt'
--- src/com/zorba-xquery/www/modules/CMakeLists.txt 2011-07-01 09:24:04 +0000
+++ src/com/zorba-xquery/www/modules/CMakeLists.txt 1970-01-01 00:00:00 +0000
@@ -1,14 +0,0 @@
-# Copyright 2006-2008 The FLWOR Foundation.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-DECLARE_ZORBA_MODULE (URI "http://www.zorba-xquery.com/modules/system" VERSION 1.0 FILE "system.xq")
=== removed file 'src/com/zorba-xquery/www/modules/system.xq'
--- src/com/zorba-xquery/www/modules/system.xq 2013-06-15 19:49:56 +0000
+++ src/com/zorba-xquery/www/modules/system.xq 1970-01-01 00:00:00 +0000
@@ -1,211 +0,0 @@
-xquery version "3.0";
-
-(:
- : Copyright 2006-2009 The FLWOR Foundation.
- :
- : Licensed under the Apache License, Version 2.0 (the "License");
- : you may not use this file except in compliance with the License.
- : You may obtain a copy of the License at
- :
- : http://www.apache.org/licenses/LICENSE-2.0
- :
- : Unless required by applicable law or agreed to in writing, software
- : distributed under the License is distributed on an "AS IS" BASIS,
- : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- : See the License for the specific language governing permissions and
- : limitations under the License.
-:)
-(:~
- : The system module allows developers to access system properties.
- : Part of these system properties are environment variables,
- : local variable to the process running Zorba, and properties defined by Zorba.
- : <br />
- : To avoid conflicts between environment variables and properties defined by Zorba,
- : all environment variables are prefixed with <i>env.</i>.
- : <br />
- : For instance, the following query: <br />
- : <pre class="ace-static">
- : import module namespace system = "http://www.zorba-xquery.com/modules/system";
- :
- : for $prop in system:properties()
- : return concat($prop, ": ", system:property($prop), "
- : ")
- : </pre>
- : <br />
- : Will output:
- : <pre class="ace-static">
- : env.TERM_PROGRAM: Apple_Terminal
- : ...
- : </pre>
- : In this example, it is important to notice that the environnement variable PATH
- : with the key env.PATH.
- :
- : @author Markus Pilman
- : @project Zorba/Input Output/System
- :)
-module namespace system = 'http://www.zorba-xquery.com/modules/system';
-
-declare namespace an = "http://www.zorba-xquery.com/annotations";
-
-declare namespace ver = "http://www.zorba-xquery.com/options/versioning";
-declare option ver:module-version "1.0";
-
-(:~
- : The name of the operating system (os.name).
- :)
-declare variable $system:os-name as xs:string := "os.name";
-
-(:~
- : The name of the computer the process is running on (os.node.name).
- :)
-declare variable $system:os-node-name as xs:string := "os.node.name";
-
-(:~
- : The major version number of the Windows installation or
- : an empty string if the process does not run on a Windows installation
- : (os.version.major).
- : <b>Works on Windows only.</b>
- :)
-declare variable $system:os-version-major as xs:string := "os.version.major";
-
-(:~
- : The minor version number of the Windows installation or
- : an empty string if the process does not run on a Windows installation
- : (os.version.minor).
- : <b>Works on Windows only.</b>
- :)
-declare variable $system:os-version-minor as xs:string := "os.version.minor";
-
-(:~
- : The build number of the Windows installation or
- : an empty string if the process does not run on a Windows installation
- : (os.version.build).
- : <b>Works on Windows only.</b>
- :)
-declare variable $system:os-version-build as xs:string := "os.version.build";
-
-(:~
- : The release of this UNIX installation or
- : an empty string if the process does not run on a UNIX/Linux installation
- : (os.version.release).
- : <b>Works on UNIX based operating systems only.</b>
- :)
-declare variable $system:os-version-release as xs:string := "os.version.release";
-(:~
- : The version of this UNIX installation or
- : an empty string if the process does not run on a UNIX/Linux installation
- : (os.version.version).
- : <b>Works on UNIX based operating systems only.</b>
- :)
-declare variable $system:os-version-version as xs:string := "os.version.version";
-
-(:~
- : The version of the Operating System.
- :)
-declare variable $system:os-version as xs:string := "os.version";
-
-(:~
- : The name of the processor architecture (os.arch).
- : For example x86 or x86_64.
- :)
-declare variable $system:os-arch as xs:string := "os.arch";
-
-(:~
- : True if system architecture is 64bits (os.is64).
- :)
-declare variable $system:os-is64 as xs:string := "os.is64";
-
-(:~
- : Number of logical processors in the system (hardware.logical.cpu).
- : This information is not available under Mac OS X.
- :)
-declare variable $system:hardware-logical-cpu as xs:string := "hardware.logical.cpu";
-
-(:~
- : Number of physical processors in the system (hardware.logical.cpu).
- :)
-declare variable $system:hardware-physical-cpu as xs:string := "hardware.physical.cpu";
-
-(:~
- : number of logical per physical processors in the system (hardware.logical.per.physical.cpu).
- : This information is not available under Mac OS X.
- :)
-declare variable $system:hardware-logical-per-physical-cpu as xs:string := "hardware.logical.per.physical.cpu";
-
-(:~
- : Physical memory available (hardware.physical.memory).
- :)
-declare variable $system:hardware-physical-memory as xs:string := "hardware.physical.memory";
-(:~
- : Virtual memory available (hardware.virtual.memory).
- :)
-declare variable $system:hardware-virtual-memory as xs:string := "hardware.virtual.memory";
-(:~
- : Gets the hardware manufacturer (hardware.manufacturer).
- :)
-declare variable $system:hardware-manufacturer as xs:string := "hardware.manufacturer";
-
-(:~
- : The Linux distribution, Zorba is running on (linux.distributor).
- : <b>Works on UNIX based operating systems only.</b>
- :)
-declare variable $system:linux-distributor as xs:string := "linux.distributor";
-
-(:~
- : The version of the Linux distribution, Zorba is running on (linux.distributor.version).
- : <b>Works on UNIX based operating systems only.</b>
- :)
-declare variable $system:linux-distributor-version as xs:string := "linux.distributor.version";
-
-(:~
- : The username, with which this process was started (user.name).
- : On Unix, this variable is only available if the USER environment
- : variable is set (e.g. it might not be available in a cronjob).
- :)
-declare variable $system:user-name as xs:string := "user.name";
-
-(:~
- : The Zorba module path, that is the paths in which Zorba looks
- : for modules (zorba.module.path).
- :)
-declare variable $system:zorba-module-path as xs:string := "zorba.module.path";
-
-(:~
- : Zorba version in the format Major.Minor.Patch (zorba.version).
- :)
-declare variable $system:zorba-version as xs:string := "zorba.version";
-
-(:~
- : Zorba major version (zorba.version.major).
- :)
-declare variable $system:zorba-version-major as xs:string := "zorba.version.major";
-
-(:~
- : Zorba minor version (zorba.version.minor).
- :)
-declare variable $system:zorba-version-minor as xs:string := "zorba.version.minor";
-
-(:~
- : Zorba patch version (zorba.version.patch).
- :)
-declare variable $system:zorba-version-patch as xs:string := "zorba.version.patch";
-
-(:~
- : Gets the system property indicated by the specified key.
- :
- : @param $key The name of the system property.
- : @return The string value of the system property, or an empty sequence if there is no property with that key.
- :)
-declare %an:nondeterministic function system:property($key as xs:string) as xs:string? external;
-
-(:~
- : This function retrieves the names of the current system properties.
- : This list includes environment variables, local variable to the process running Zorba, and properties defined by Zorba.
- : <br />
- : To avoid conflicts between environment variables and properties defined by Zorba,
- : all environment variables are prefixed with <i>env.</i>.
- :
- : @return List of all system properties.
- :)
-declare %an:nondeterministic function system:properties() as xs:string* external;
-
=== removed directory 'src/com/zorba-xquery/www/modules/system.xq.src'
=== removed file 'src/com/zorba-xquery/www/modules/system.xq.src/system.cpp'
--- src/com/zorba-xquery/www/modules/system.xq.src/system.cpp 2012-07-19 12:29:57 +0000
+++ src/com/zorba-xquery/www/modules/system.xq.src/system.cpp 1970-01-01 00:00:00 +0000
@@ -1,606 +0,0 @@
-/*
- * Copyright 2006-2008 The FLWOR Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <cstdlib>
-#include <cstdio>
-#include <sstream>
-
-#ifdef WIN32
-# include <Windows.h>
-# include <malloc.h>
-# include <stdio.h>
-# include <tchar.h>
-# include <winreg.h>
-#else
-#include <sys/utsname.h>
-# ifndef __APPLE__
-# include <sys/sysinfo.h>
-# else
-# include <sys/param.h>
-# include <sys/sysctl.h>
-# endif
-#endif
-
-#include <zorba/zorba_string.h>
-#include <zorba/singleton_item_sequence.h>
-#include <zorba/vector_item_sequence.h>
-#include <zorba/empty_sequence.h>
-#include <zorba/item_factory.h>
-
-
-#ifdef LINUX
-#include <iostream>
-#include <string>
-#include <fstream>
-#include <unistd.h>
-extern char** environ;
-#elif defined APPLE
-# include <crt_externs.h>
-#endif
-
-#include "system.h"
-
-
-namespace zorba { namespace system {
-
- const String SystemModule::SYSTEM_MODULE_NAMESPACE = "http://www.zorba-xquery.com/modules/system";
-
-#ifdef WIN32
- typedef BOOL (WINAPI *LPFN_GLPI)(
- PSYSTEM_LOGICAL_PROCESSOR_INFORMATION,
- PDWORD);
-
- // Helper function to count set bits in the processor mask.
- DWORD CountSetBits(ULONG_PTR bitMask)
- {
- DWORD LSHIFT = sizeof(ULONG_PTR)*8 - 1;
- DWORD bitSetCount = 0;
- ULONG_PTR bitTest = (ULONG_PTR)1 << LSHIFT;
- DWORD i;
- for (i = 0; i <= LSHIFT; ++i)
- {
- bitSetCount += ((bitMask & bitTest)?1:0);
- bitTest/=2;
- }
-
- return bitSetCount;
- }
-
- DWORD numaNodeCount = 0;
- DWORD processorPackageCount = 0;
- DWORD logicalProcessorCount = 0;
- DWORD processorCoreCount = 0;
- DWORD processorL1CacheCount = 0;
- DWORD processorL2CacheCount = 0;
- DWORD processorL3CacheCount = 0;
- static void countProcessors() {
- LPFN_GLPI glpi;
- BOOL done = FALSE;
- PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buffer = NULL;
- PSYSTEM_LOGICAL_PROCESSOR_INFORMATION ptr = NULL;
- DWORD returnLength = 0;
- DWORD byteOffset = 0;
- PCACHE_DESCRIPTOR Cache;
-
- glpi = (LPFN_GLPI) GetProcAddress(GetModuleHandle(TEXT("kernel32")), "GetLogicalProcessorInformation");
- if (NULL == glpi) {
- // GetLogicalProcessorInformation is not supported.
- return;
- }
-
- while (!done)
- {
- DWORD rc = glpi(buffer, &returnLength);
- if (FALSE == rc)
- {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
- {
- if (buffer)
- free(buffer);
- buffer = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(returnLength);
- if (NULL == buffer)
- {
- // Error: Allocation failure
- return;
- }
- } else {
- // Error %d, GetLastError()
- return;
- }
- } else {
- done = TRUE;
- }
- }
- ptr = buffer;
- while (byteOffset + sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION) <= returnLength)
- {
- switch (ptr->Relationship)
- {
- case RelationNumaNode:
- // Non-NUMA systems report a single record of this type.
- numaNodeCount++;
- break;
- case RelationProcessorCore:
- processorCoreCount++;
- // A hyperthreaded core supplies more than one logical processor.
- logicalProcessorCount += CountSetBits(ptr->ProcessorMask);
- break;
-
- case RelationCache:
- // Cache data is in ptr->Cache, one CACHE_DESCRIPTOR structure for each cache.
- Cache = &ptr->Cache;
- if (Cache->Level == 1)
- {
- processorL1CacheCount++;
- }
- else if (Cache->Level == 2)
- {
- processorL2CacheCount++;
- }
- else if (Cache->Level == 3)
- {
- processorL3CacheCount++;
- }
- break;
- case RelationProcessorPackage:
- // Logical processors share a physical package.
- processorPackageCount++;
- break;
- default:
- // Error: Unsupported LOGICAL_PROCESSOR_RELATIONSHIP value.
- break;
- }
- byteOffset += sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION);
- ptr++;
- }
- free(buffer);
- return;
- }
-
-#endif
-
-#ifdef LINUX
- static void trim(std::string& str, char delim)
- {
- std::string::size_type pos = str.find_last_not_of(delim);
- if(pos != std::string::npos) {
- str.erase(pos + 1);
- pos = str.find_first_not_of(delim);
- if(pos != std::string::npos) str.erase(0, pos);
- }
- else str.erase(str.begin(), str.end());
- }
-
-
- int logical=0;
- int cores=0;
- int physical=0;
-
-
- static void countProcessors() {
- logical=0;
- cores=1; // per default: single core processor
- physical=0;
-
- std::ifstream in("/proc/cpuinfo");
- if(in) {
- std::string name;
- std::string value;
-
- while(in) {
- getline(in, name, ':');
- trim (name, ' ');
- trim (name, '\t');
- trim (name, '\n');
- getline(in, value);
- trim (value, ' ');
- trim (value, '\t');
- if (name == "processor") {
- logical++;
- }
-
- if (name == "cpu cores") {
- cores = atoi(value.c_str());
- }
- }
- physical = logical/cores;
- in.close();
- }
- }
-
-
-
- static std::pair<std::string, std::string> getDistribution() {
- std::pair<std::string, std::string> lRes;
- FILE *pipe;
- const char* command = "lsb_release -r -i";
- pipe = (FILE*) popen(command, "r");
-
- char line[1024];
- while (fgets(line, sizeof(line), pipe)) {
- std::stringstream s(line);
- std::string name, value;
- getline(s, name, ':');
- trim(name, ' ');
- trim(name, '\t');
- getline(s, value, ':');
- trim(value, ' ');
- trim(value, '\t');
- trim(value, '\n');
- if (name == "Distributor ID") {
- lRes.first = value;
- } else {
- lRes.second = value;
- }
- }
- return lRes;
- }
-#endif
-
- SystemModule::SystemModule()
- : thePropertyFunction(0), thePropertiesFunction(0)
- {
- }
-
- ExternalFunction* SystemModule::getExternalFunction(const String& localName) {
- if (localName == "properties") {
- if (!thePropertiesFunction)
- thePropertiesFunction = new PropertiesFunction(this);
- return thePropertiesFunction;
- } else if (localName == "property") {
- if (!thePropertyFunction)
- thePropertyFunction = new PropertyFunction(this);
- return thePropertyFunction;
- }
- return 0;
- }
-
- void SystemModule::destroy() {
- delete this;
- }
-
- SystemModule::~SystemModule() {
- delete thePropertyFunction;
- delete thePropertiesFunction;
- }
-
-
- SystemFunction::SystemFunction(const ExternalModule* aModule)
- : theModule(aModule), theFactory(Zorba::getInstance(0)->getItemFactory())
- {
-#ifdef WIN32
-
- {
- DWORD nodeNameLength = MAX_COMPUTERNAME_LENGTH + 1;
- TCHAR nodeName[MAX_COMPUTERNAME_LENGTH + 1];
- char nodeNameC[MAX_COMPUTERNAME_LENGTH + 1];
- GetComputerName(nodeName, &nodeNameLength);
- for (DWORD i = 0; i < nodeNameLength; ++i) {
- nodeNameC[i] = static_cast<char>(nodeName[i]);
- }
- nodeNameC[nodeNameLength] = NULL; // Terminate string
- theProperties.insert(std::make_pair("os.node.name", nodeNameC));
- }
-
- {
- DWORD dwVersion = 0;
- DWORD dwMajorVersion = 0;
- DWORD dwMinorVersion = 0;
- DWORD dwBuild = 0;
-
- dwVersion = GetVersion();
-
- // Get the Windows version.
- dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
- dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
-
- // Get the build number.
- if (dwVersion < 0x80000000)
- dwBuild = (DWORD)(HIWORD(dwVersion));
-
- std::string major;
- std::string minor;
- std::string build;
- {
- std::stringstream sMajor;
- sMajor << dwMajorVersion;
- std::stringstream sMinor;
- sMinor << dwMinorVersion;
- std::stringstream sBuild;
- sBuild << dwBuild;
-
- major = sMajor.str();
- minor = sMinor.str();
- build = sBuild.str();
- }
- theProperties.insert(std::make_pair("os.version.major", major));
- theProperties.insert(std::make_pair("os.version.minor", minor));
- theProperties.insert(std::make_pair("os.version.build", build));
- theProperties.insert(std::make_pair("os.version", major + "." + minor + "." + build));
- // http://msdn.microsoft.com/en-us/library/ms724832(v=VS.85).aspx
- std::string operativeSystem;
- theProperties.insert(std::make_pair("os.name", "Windows"));
- {
- countProcessors();
- std::stringstream logicalProcessors;
- logicalProcessors << processorPackageCount;
- std::stringstream physicalProcessors;
- physicalProcessors << logicalProcessorCount;
- std::stringstream logicalPerPhysicalProcessors;
- logicalPerPhysicalProcessors << (logicalProcessorCount / processorPackageCount );
- theProperties.insert(std::make_pair("hardware.physical.cpu", logicalProcessors.str() ));
- theProperties.insert(std::make_pair("hardware.logical.cpu", physicalProcessors.str() ));
- theProperties.insert(std::make_pair("hardware.logical.per.physical.cpu", logicalPerPhysicalProcessors.str() ));
- }
- {
- MEMORYSTATUSEX statex;
- statex.dwLength = sizeof (statex);
- GlobalMemoryStatusEx (&statex);
- std::stringstream virtualMemory;
- virtualMemory << statex.ullTotalVirtual;
- std::stringstream physicalMemory;
- physicalMemory << statex.ullTotalPhys;
- theProperties.insert(std::make_pair("hardware.virtual.memory", virtualMemory.str() ));
- theProperties.insert(std::make_pair("hardware.physical.memory", physicalMemory.str() ));
- }
-
- }
- {
- DWORD userNameLength = 1023;
- TCHAR userName[1024];
- char userNameC[1024];
- GetUserName(userName, &userNameLength);
- for (DWORD i = 0; i < userNameLength; ++i) {
- userNameC[i] = static_cast<char>(userName[i]);
- }
- theProperties.insert(std::make_pair("user.name", userNameC));
- }
- {
- SYSTEM_INFO info;
- GetSystemInfo(&info);
- if (info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
- theProperties.insert(std::make_pair("os.arch", "x86_64"));
- theProperties.insert(std::make_pair("os.is64", "true"));
- } else if (info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64) {
- theProperties.insert(std::make_pair("os.arch", "ia64"));
- theProperties.insert(std::make_pair("os.is64", "true"));
- } else if (info.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) {
- theProperties.insert(std::make_pair("os.arch", "i386"));
- theProperties.insert(std::make_pair("os.is64", "false"));
- }
- }
-
- {
- HKEY keyHandle;
- TCHAR value [1024];
- char valueC [1024];
- DWORD size = 0;
- DWORD Type;
- if( RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"HARDWARE\\DESCRIPTION\\System\\BIOS", 0, KEY_QUERY_VALUE, &keyHandle) == ERROR_SUCCESS)
- {
- RegQueryValueEx( keyHandle, L"SystemManufacturer", NULL, &Type, (LPBYTE)value, &size);
- for (DWORD i = 0; i < size; ++i) {
- valueC[i] = static_cast<char>(value[i]);
- }
- if (size > 0)
- theProperties.insert(std::make_pair("hardware.manufacturer", valueC));
- }
- RegCloseKey(keyHandle);
- }
-
-
-#else
- struct utsname osname;
- if (uname(&osname) == 0)
- {
- theProperties.insert(std::make_pair("os.name", osname.sysname));
- theProperties.insert(std::make_pair("os.node.name", osname.nodename));
- theProperties.insert(std::make_pair("os.version.release", osname.release));
- theProperties.insert(std::make_pair("os.version.version", osname.version));
- theProperties.insert(std::make_pair("os.version", osname.release));
- theProperties.insert(std::make_pair("os.arch", osname.machine));
- }
- char* lUser = getenv("USER");
- if (lUser)
- {
- theProperties.insert(std::make_pair("user.name", lUser));
- }
- theProperties.insert(std::make_pair("os.is64", "false"));
- {
-#ifdef __APPLE__
- int mib[2];
- size_t len = 4;
- uint32_t res = 0;
-
- mib[0] = CTL_HW;
- mib[1] = HW_NCPU;
- sysctl(mib, 2, &res, &len, NULL, NULL);
- std::stringstream lStream;
- lStream << res;
- theProperties.insert(std::make_pair("hardware.physical.cpu", lStream.str()));
-#else
- countProcessors();
- std::stringstream logicalProcessor;
- std::stringstream physicalProcessor;
- std::stringstream logicalPerPhysicalProcessors;
- logicalProcessor << logical;
- physicalProcessor << physical;
- logicalPerPhysicalProcessors << cores;
- theProperties.insert(std::make_pair("hardware.logical.per.physical.cpu", logicalPerPhysicalProcessors.str() ));
- theProperties.insert(std::make_pair("hardware.physical.cpu", physicalProcessor.str() ));
- theProperties.insert(std::make_pair("hardware.logical.cpu", logicalProcessor.str() ));
-#endif
- }
- {
-# ifdef LINUX
- struct sysinfo sys_info;
- if(sysinfo(&sys_info) == 0) {
- std::stringstream memory;
- memory << sys_info.totalram;
- std::stringstream swap;
- swap << sys_info.totalswap;
- theProperties.insert(std::make_pair("hardware.virtual.memory", swap.str() ));
- theProperties.insert(std::make_pair("hardware.physical.memory", memory.str() ));
- }
-# elif defined __APPLE__
- int mib[2];
- size_t len = 8;
- uint64_t res = 0;
-
- mib[0] = CTL_HW;
- mib[1] = HW_MEMSIZE;
- sysctl(mib, 2, &res, &len, NULL, NULL);
- std::stringstream lStream;
- lStream << res;
- theProperties.insert(std::make_pair("hardware.physical.memory", lStream.str()));
-# endif
- }
-
-#endif
-#ifdef LINUX
- theProperties.insert(std::make_pair("linux.distributor", ""));
- theProperties.insert(std::make_pair("linux.distributor.version", ""));
-#endif
- theProperties.insert(std::make_pair("zorba.version", Zorba::version().getVersion()));
- theProperties.insert(std::make_pair("zorba.version.major", intToString(Zorba::version().getMajorVersion())));
- theProperties.insert(std::make_pair("zorba.version.minor", intToString(Zorba::version().getMinorVersion())));
- theProperties.insert(std::make_pair("zorba.version.patch", intToString(Zorba::version().getPatchVersion())));
- }
-
- String SystemFunction::intToString(int v) {
- std::stringstream ss;
- ss << v;
- return ss.str();
- }
-
- bool SystemFunction::getEnv(const String& name, String& value) const
- {
- char* v = getenv(name.c_str());
- if (v == NULL) return false;
- value = v;
- return true;
- }
-
- void SystemFunction::getEnvNames(std::vector<Item>& names) const
- {
-#ifdef WIN32
- // put in the environment variables
- TCHAR *l_EnvStr;
- l_EnvStr = GetEnvironmentStrings();
-
- LPTSTR l_str = l_EnvStr;
-
- int count = 0;
- while (true)
- {
- if (*l_str == 0) break;
- while (*l_str != 0) l_str++;
- l_str++;
- count++;
- }
-
- for (int i = 0; i < count; i++)
- {
- char lStr[1024];
- memset(lStr, 0, 1024);
- for (int i =0; i<1023 && l_EnvStr[i]; ++i) {
- lStr[i] = (char) l_EnvStr[i];
- }
- std::string e(lStr);
- std::string name("env.");
- name += e.substr(0, e.find('='));
- String value = e.substr(e.find('=') + 1);
- if (name != "env.")
- names.push_back(theFactory->createString(name));
- while(*l_EnvStr != '\0')
- l_EnvStr++;
- l_EnvStr++;
- }
- //FreeEnvironmentStrings(l_EnvStr);
-#else
-# ifdef APPLE
- char** environ = *_NSGetEnviron();
-# endif // APPLE
- for (int i = 0; environ[i] != NULL; ++i) {
- std::string e(environ[i]);
- String name("env.");
- name += e.substr(0, e.find('='));
- names.push_back(theFactory->createString(name));
- }
-#endif
- }
-
- ItemSequence_t PropertiesFunction::evaluate(
- const ExternalFunction::Arguments_t& args) const {
- std::vector<Item> lRes;
- getEnvNames(lRes);
- for (std::map<String, String>::const_iterator i = theProperties.begin();
- i != theProperties.end(); ++i) {
- Item lItem = theFactory->createString(i->first.c_str());
- lRes.push_back(lItem);
- }
- // insert the zorba module path
- lRes.push_back(theFactory->createString("zorba.module.path"));
- return ItemSequence_t(new VectorItemSequence(lRes));
- }
-
- ItemSequence_t PropertyFunction::evaluate(
- const ExternalFunction::Arguments_t& args,
- const StaticContext* sctx,
- const DynamicContext* dctx) const {
- Item item;
- Iterator_t arg0_iter = args[0]->getIterator();
- arg0_iter->open();
- arg0_iter->next(item);
- arg0_iter->close();
- String envS = item.getStringValue();
- String lRes;
- if (envS == "zorba.module.path") {
- std::vector<String> lModulePaths;
- sctx->getFullModulePaths(lModulePaths);
- if (lModulePaths.size() == 0)
- return ItemSequence_t(new SingletonItemSequence(theFactory->createString("")));
- lRes = lModulePaths[0];
- for (std::vector<String>::iterator i = lModulePaths.begin() + 1; i != lModulePaths.end(); ++i) {
-#ifdef WIN32
- lRes += ";";
-#else
- lRes += ":";
-#endif
- lRes += *i;
- }
- } else if (envS.substr(0,4) == "env.") {
- //Sleep(5000);
- if (!getEnv(envS.substr(4), lRes)) {
- return ItemSequence_t(new EmptySequence());
- }
-#ifdef LINUX
- } else if (envS == "linux.distributor") {
- lRes = getDistribution().first;
- } else if (envS == "linux.distributor.version") {
- lRes = getDistribution().second;
-#endif
- } else {
- std::map<String, String>::const_iterator i;
- if ((i = theProperties.find(envS.c_str())) != theProperties.end()) {
- lRes = i->second;
- } else {
- return ItemSequence_t(new EmptySequence());
- }
- }
- return ItemSequence_t(new SingletonItemSequence(theFactory->createString(lRes)));
- }
-}} // namespace zorba, system
-
=== removed file 'src/com/zorba-xquery/www/modules/system.xq.src/system.h'
--- src/com/zorba-xquery/www/modules/system.xq.src/system.h 2011-08-05 02:22:28 +0000
+++ src/com/zorba-xquery/www/modules/system.xq.src/system.h 1970-01-01 00:00:00 +0000
@@ -1,93 +0,0 @@
-/*
- * Copyright 2006-2008 The FLWOR Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __COM_ZORBA_WWW_MODULES_SYSTEM_H__
-#define __COM_ZORBA_WWW_MODULES_SYSTEM_H__
-#include <vector>
-#include <map>
-
-#include <zorba/zorba.h>
-#include <zorba/external_module.h>
-#include <zorba/function.h>
-
-namespace zorba { namespace system {
- class SystemModule : public ExternalModule {
- private:
- ExternalFunction* thePropertyFunction;
- ExternalFunction* thePropertiesFunction;
- const static String SYSTEM_MODULE_NAMESPACE;
- public:
- SystemModule();
- virtual ~SystemModule();
- public:
- virtual String getURI() const { return SYSTEM_MODULE_NAMESPACE; }
-
- virtual ExternalFunction* getExternalFunction(const String& localName);
-
- virtual void destroy();
- };
-
- class SystemFunction {
- protected:
- const ExternalModule* theModule;
- ItemFactory* theFactory;
- std::map<String, String> theProperties;
- public:
- SystemFunction(const ExternalModule* aModule);
- protected:
- String getURI() const { return theModule->getURI(); }
- bool getEnv(const String& name, String& value) const;
- void getEnvNames(std::vector<Item>& names) const;
- String intToString(int v);
- };
-
- class PropertiesFunction : public NonContextualExternalFunction, public SystemFunction {
- public:
- PropertiesFunction(const ExternalModule* mod) : SystemFunction(mod) {}
-
- virtual String getLocalName() const { return "properties"; }
-
- virtual ItemSequence_t
- evaluate(const ExternalFunction::Arguments_t& args) const;
- virtual String getURI() const { return SystemFunction::getURI(); }
- };
-
- class PropertyFunction : public ContextualExternalFunction, public SystemFunction {
- public:
- PropertyFunction(const ExternalModule* mod) : SystemFunction(mod) {}
-
- virtual String getLocalName() const { return "property"; }
-
- virtual ItemSequence_t
- evaluate(const ExternalFunction::Arguments_t& args,
- const StaticContext* sctx,
- const DynamicContext* dctx) const;
- virtual String getURI() const { return SystemFunction::getURI(); }
- };
-
-} } // namespace zorba, namespace system
-
-#ifdef WIN32
-# define DLL_EXPORT __declspec(dllexport)
-#else
-# define DLL_EXPORT __attribute__ ((visibility("default")))
-#endif
-
-extern "C" DLL_EXPORT zorba::ExternalModule* createModule() {
- return new zorba::system::SystemModule();
-}
-
-#endif // __COM_ZORBA_WWW_MODULES_SYSTEM_H__
Follow ups
-
[Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Zorba Build Bot, 2013-08-08
-
[Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: noreply, 2013-08-08
-
[Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Zorba Build Bot, 2013-08-08
-
[Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Zorba Build Bot, 2013-08-08
-
[Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Chris Hillery, 2013-08-08
-
[Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Zorba Build Bot, 2013-08-08
-
[Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Zorba Build Bot, 2013-08-08
-
Re: [Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Chris Hillery, 2013-08-08
-
Re: [Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Chris Hillery, 2013-08-07
-
Re: [Merge] lp:~zorba-coders/zorba/bug-1188058 into lp:zorba/system-module
From: Luis Rodriguez Gonzalez, 2013-08-07