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__
-- Mailing list: https://launchpad.net/~zorba-coders Post to : [email protected] Unsubscribe : https://launchpad.net/~zorba-coders More help : https://help.launchpad.net/ListHelp

