27 #include "../Defines.h"
37 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
41 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX || TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD
46 #include <sys/resource.h>
48 #include <sys/sysctl.h>
49 #include <sys/types.h>
52 #elif TE_PLATFORM == TE_PLATFORMCODE_APPLE
56 #include <sys/sysctl.h>
59 #error "Unsuported plataform for physical memory checking"
66 #include <boost/filesystem.hpp>
70 unsigned long int freemem = 0;
72 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD || TE_PLATFORM == TE_PLATFORMCODE_APPLE
75 std::size_t usermem_len =
sizeof(usermem);
77 int mib[2] = { CTL_HW, HW_USERMEM };
79 if(sysctl(mib, (2 *
sizeof(
int)), &usermem, &usermem_len, NULL, 0) == 0)
81 freemem =
static_cast<unsigned long int>(usermem);
85 throw Exception(
"Could not get free physical memory!");
88 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX
89 freemem =
static_cast<unsigned long int>( sysconf(_SC_PAGESIZE) * sysconf(_SC_AVPHYS_PAGES) );
91 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
92 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
93 GlobalMemoryStatus(status_buffer);
94 freemem =
static_cast<unsigned long int>(status_buffer->dwAvailPhys);
97 #error "Unsuported plataform for physical memory checking"
105 unsigned long int totalmem = 0;
107 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD || TE_PLATFORM == TE_PLATFORMCODE_APPLE
108 unsigned int physmem = 0;
110 std::size_t physmem_len =
sizeof(physmem);
112 int mib[2] = { CTL_HW, HW_PHYSMEM };
114 if(sysctl(mib, (2 *
sizeof(
int)), &physmem, &physmem_len, NULL, 0) == 0)
116 totalmem =
static_cast<unsigned long int>(physmem);
120 throw Exception(
"Could not get total physical memory!");
123 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX
124 totalmem =
static_cast<unsigned long int>( sysconf(_SC_PAGESIZE) * sysconf(_SC_PHYS_PAGES) );
126 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
127 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
128 GlobalMemoryStatus(status_buffer);
129 totalmem =
static_cast<unsigned long int>(status_buffer->dwTotalPhys);
130 delete status_buffer;
132 #error "Unsuported plataform for physical memory checking"
140 unsigned long int usedmem = 0;
142 #if TE_PLATFORM == TE_PLATFORMCODE_FREEBSD || TE_PLATFORM == TE_PLATFORMCODE_OPENBSD
143 struct rusage rusageinfo;
144 getrusage( RUSAGE_SELF, &rusageinfo );
145 usedmem =
static_cast<unsigned long int>(1024 * rusageinfo.ru_maxrss);
147 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX
148 std::string pid, comm, state, ppid, pgrp, session, tty_nr,
149 tpgid, flags, minflt, cminflt, majflt, cmajflt,
150 utime, stime, cutime, cstime, priority, nice,
151 stringO, itrealvalue, starttime;
153 std::ifstream stat_stream(
"/proc/self/stat", std::ios_base::in);
155 stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr
156 >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
157 >> utime >> stime >> cutime >> cstime >> priority >> nice
158 >> stringO >> itrealvalue >> starttime >> usedmem;
160 #elif TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_APPLE
161 struct rusage rusageinfo;
162 getrusage(RUSAGE_SELF, &rusageinfo);
163 usedmem =
static_cast<unsigned long int>(1024 * rusageinfo.ru_maxrss);
165 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
166 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
167 GlobalMemoryStatus( status_buffer );
168 usedmem =
static_cast<unsigned long int>(status_buffer->dwTotalVirtual - status_buffer->dwAvailVirtual);
169 delete status_buffer;
172 #error "Unsuported plataform for virtual memory checking"
181 unsigned long int totalmem = 0;
183 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX)
186 if( getrlimit( RLIMIT_AS, &info ) == 0 )
188 totalmem = (
unsigned long int)info.rlim_max;
191 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
192 LPMEMORYSTATUS status_buffer =
new MEMORYSTATUS;
193 GlobalMemoryStatus( status_buffer );
194 totalmem = (
unsigned long int) status_buffer->dwTotalVirtual;
195 delete status_buffer;
198 #error
"Unsuported plataform for virtual memory checking"
206 unsigned int procnmb = 0;
208 #if TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
209 SYSTEM_INFO siSysInfo;
210 GetSystemInfo(&siSysInfo);
211 procnmb =
static_cast<unsigned int>(siSysInfo.dwNumberOfProcessors);
213 #elif TE_PLATFORM == TE_PLATFORMCODE_LINUX || TE_PLATFORM == TE_PLATFORMCODE_AIX || TE_PLATFORM == TE_PLATFORMCODE_APPLE
214 procnmb =
static_cast<unsigned int>(sysconf(_SC_NPROCESSORS_ONLN));
217 #error "ERROR: Unsupported platform"
227 char* varValuePtr = getenv(
"PATH");
229 std::string separator;
230 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX)
232 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
235 #error "Unsuported plataform for virtual memory checking"
240 Tokenize( std::string( varValuePtr ), paths, separator );
248 char* varValuePtr = getenv(
"LD_LIBRARY_PATH");
250 std::string separator;
251 #if (TE_PLATFORM == TE_PLATFORMCODE_FREEBSD) || (TE_PLATFORM == TE_PLATFORMCODE_OPENBSD) || (TE_PLATFORM == TE_PLATFORMCODE_APPLE) || (TE_PLATFORM == TE_PLATFORMCODE_LINUX)
253 #elif TE_PLATFORM == TE_PLATFORMCODE_MSWINDOWS
256 #error "Unsuported plataform for virtual memory checking"
261 Tokenize( std::string( varValuePtr ), paths, separator );
268 boost::filesystem::path tl_path = boost::filesystem::current_path();
270 boost::filesystem::path eval_path = tl_path / p;
272 if(boost::filesystem::exists(eval_path))
273 return eval_path.string();
277 eval_path = tl_path / p;
279 if(boost::filesystem::exists(eval_path))
280 return eval_path.string();
283 tl_path = TERRALIB_CODEBASE_PATH;
285 eval_path = tl_path / p;
287 if(boost::filesystem::exists(eval_path))
288 return eval_path.string();
291 const char* te_env = getenv(TERRALIB_DIR_VAR_NAME);
297 eval_path = tl_path / p;
299 if(boost::filesystem::exists(eval_path))
300 return eval_path.string();
304 tl_path = TERRALIB_INSTALL_PREFIX_PATH;
306 eval_path = tl_path / p;
308 if(boost::filesystem::exists(eval_path))
309 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...