27 #include "terralib_config.h"
28 #include "../Defines.h"
38 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
42 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX || TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD
47 #include <sys/resource.h>
49 #include <sys/sysctl.h>
50 #include <sys/types.h>
53 #elif TE_PLATFORM == TE_PLATFORMCODE_APPLE
57 #include <sys/sysctl.h>
60 #error "Unsuported plataform for physical memory checking"
67 #include <boost/filesystem.hpp>
71 unsigned long int freemem = 0;
73 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD || TE_PLATFORM == TE_PLATFORMCODE_APPLE
76 std::size_t usermem_len =
sizeof(usermem);
78 int mib[2] = { CTL_HW, HW_USERMEM };
80 if(sysctl(mib, (2 *
sizeof(
int)), &usermem, &usermem_len, NULL, 0) == 0)
82 freemem =
static_cast<unsigned long int>(usermem);
86 throw Exception(
"Could not get free physical memory!");
89 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX
90 freemem =
static_cast<unsigned long int>( sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES) );
92 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
93 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
94 GlobalMemoryStatus(status_buffer);
95 freemem =
static_cast<unsigned long int>(status_buffer->dwAvailPhys);
98 #error "Unsuported plataform for physical memory checking"
106 unsigned long int totalmem = 0;
108 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD || TE_PLATFORM == TE_PLATFORMCODE_APPLE
111 int mib[2] = { CTL_HW, HW_MEMSIZE };
112 #elif defined(HW_PHYSMEM)
113 unsigned int physmem = 0;
114 int mib[2] = { CTL_HW, HW_PHYSMEM };
115 #elif defined(HW_PHYSMEM64)
117 int mib[2] = { CTL_HW, HW_PHYSMEM64 };
118 #elif defined(HW_REALMEM)
119 unsigned int physmem = 0;
120 int mib[2] = { CTL_HW, HW_REALMEM };
123 std::size_t physmem_len =
sizeof(physmem);
125 if(sysctl(mib, 2, &physmem, &physmem_len, NULL, 0) == 0)
127 totalmem =
static_cast<unsigned long int>(physmem);
131 throw Exception(
"Could not get total physical memory!");
133 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX
134 totalmem =
static_cast<unsigned long int>( sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES) );
136 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
137 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
138 GlobalMemoryStatus(status_buffer);
139 totalmem =
static_cast<unsigned long int>(status_buffer->dwTotalPhys);
140 delete status_buffer;
142 #error "Unsuported plataform for physical memory checking"
150 unsigned long int usedmem = 0;
152 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD
153 struct rusage rusageinfo;
154 getrusage( RUSAGE_SELF, &rusageinfo );
155 usedmem =
static_cast<unsigned long int>(1024 * rusageinfo.ru_maxrss);
157 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX
158 std::string pid, comm, state, ppid, pgrp, session, tty_nr,
159 tpgid, flags, minflt, cminflt, majflt, cmajflt,
160 utime, stime, cutime, cstime, priority, nice,
161 stringO, itrealvalue, starttime;
163 std::ifstream stat_stream(
"/proc/self/stat", std::ios_base::in);
165 stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr
166 >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
167 >> utime >> stime >> cutime >> cstime >> priority >> nice
168 >> stringO >> itrealvalue >> starttime >> usedmem;
170 #elif TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_APPLE
171 struct rusage rusageinfo;
172 getrusage(RUSAGE_SELF, &rusageinfo);
173 usedmem =
static_cast<unsigned long int>(1024 * rusageinfo.ru_maxrss);
175 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
176 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
177 GlobalMemoryStatus( status_buffer );
178 usedmem =
static_cast<unsigned long int>(status_buffer->dwTotalVirtual - status_buffer->dwAvailVirtual);
179 delete status_buffer;
182 #error "Unsuported plataform for virtual memory checking"
191 unsigned long int totalmem = 0;
193 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX)
196 if( getrlimit( RLIMIT_AS, &info ) == 0 )
198 totalmem = (
unsigned long int)info.rlim_max;
201 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
202 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
203 GlobalMemoryStatus( status_buffer );
204 totalmem = (
unsigned long int) status_buffer->dwTotalVirtual;
205 delete status_buffer;
208 #error
"Unsuported plataform for virtual memory checking"
216 unsigned int procnmb = 0;
218 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
219 SYSTEM_INFO siSysInfo;
220 GetSystemInfo(&siSysInfo);
221 procnmb =
static_cast<unsigned int>(siSysInfo.dwNumberOfProcessors);
223 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX || TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_APPLE
224 procnmb =
static_cast<unsigned int>(sysconf(_SC_NPROCESSORS_ONLN));
227 #error "ERROR: Unsupported platform"
237 char* varValuePtr = getenv(
"PATH");
239 std::string separator;
240 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX)
242 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
245 #error "Unsuported plataform for virtual memory checking"
250 Tokenize( std::string( varValuePtr ), paths, separator );
258 char* varValuePtr = getenv(
"LD_LIBRARY_PATH");
260 std::string separator;
261 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX)
263 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
266 #error "Unsuported plataform for virtual memory checking"
271 Tokenize( std::string( varValuePtr ), paths, separator );
278 boost::filesystem::path tl_path = boost::filesystem::current_path();
280 boost::filesystem::path eval_path = tl_path / p;
282 if(boost::filesystem::exists(eval_path))
283 return eval_path.string();
287 eval_path = tl_path / p;
289 if(boost::filesystem::exists(eval_path))
290 return eval_path.string();
293 const char* te_env = getenv(TERRALIB_DIR_VAR_NAME);
299 eval_path = tl_path / p;
301 if(boost::filesystem::exists(eval_path))
302 return eval_path.string();
306 tl_path = TERRALIB_INSTALL_PREFIX_PATH;
308 eval_path = tl_path / p;
310 if(boost::filesystem::exists(eval_path))
311 return eval_path.string();
314 tl_path = TERRALIB_CODEBASE_PATH;
316 eval_path = tl_path / p;
318 if(boost::filesystem::exists(eval_path))
319 return eval_path.string();
TECOMMONEXPORT void GetDecompostedLDPathEnvVar(std::vector< std::string > &paths)
Returns the system LD_LIBRARY_PATH enviroment variable, decomposed into directory names...
TECOMMONEXPORT std::string FindInTerraLibPath(const std::string &p)
Returns the path relative to a directory or file in the context of TerraLib.
TECOMMONEXPORT void GetDecompostedPathEnvVar(std::vector< std::string > &paths)
Returns the system PATH enviroment variable, decomposed into directory names, or an empty vector if n...
void Tokenize(const std::string &str, std::vector< std::string > &tokens, const std::string &delimiters=" ")
It tokenizes a given string with a delimiter of your own choice.
TECOMMONEXPORT unsigned int GetPhysProcNumber()
Returns the number of physical processors.
TECOMMONEXPORT unsigned long int GetUsedVirtualMemory()
Returns the amount of used virtual memory (bytes) for the current process (physical + swapped)...
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
This class is designed for dealing with multi-language text translation in TerraLib.
This class is designed to declare objects to be thrown as exceptions by TerraLib. ...
Utility functions for dealing with strings.
TECOMMONEXPORT unsigned long int GetTotalPhysicalMemory()
Returns the amount of total physical memory (bytes).
TECOMMONEXPORT unsigned long int GetFreePhysicalMemory()
Returns the amount of free physical memory (bytes).
TECOMMONEXPORT unsigned long int GetTotalVirtualMemory()
Returns the amount of total virtual memory (bytes) that can be claimed by the current process (physic...