diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2012-03-24 20:39:49 +0200 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2012-03-24 20:39:49 +0200 |
commit | 7253d2141c17643f4805f26970e2824163dbc95b (patch) | |
tree | 6bbcbb149764d097d44def6dfaf9c31ba9f58d84 | |
parent | 3faa907f6e8597ffae5b9f7db8567fe5fab8c9f6 (diff) |
some log in speedtest
some curl code optimisation (b0ris suggestion)
-rwxr-xr-x | server/server/config.cpp | 9 | ||||
-rw-r--r-- | server/server/speedtest.cpp | 53 | ||||
-rw-r--r-- | server/server/speedtest.h | 10 |
3 files changed, 48 insertions, 24 deletions
diff --git a/server/server/config.cpp b/server/server/config.cpp index 98db729..40ff3fb 100755 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -4,11 +4,9 @@ extern logtofile *logger; void reload_config_thread_func(config *cfg, boost::mutex *lists_mutex) { + boost::this_thread::sleep(boost::posix_time::seconds(cfg->config_reload_interval())); while(!boost::this_thread::interruption_requested()) { - boost::this_thread::sleep(boost::posix_time::seconds(cfg->config_reload_interval())); - if(boost::this_thread::interruption_requested()) - return; lists_mutex->lock(); cfg->load_vars(); cfg->load_cvars(); @@ -19,6 +17,7 @@ void reload_config_thread_func(config *cfg, boost::mutex *lists_mutex) cfg->load_upload_list(); cfg->load_servers_list(); lists_mutex->unlock(); + boost::this_thread::sleep(boost::posix_time::seconds(cfg->config_reload_interval())); } } @@ -29,7 +28,7 @@ void speed_test_thread_func(config *cfg, int check_interval, std::list<config::p std::list<config::static_proxy_entry> tmp_list = *static_proxy_list; for(std::list<config::static_proxy_entry>::iterator i = tmp_list.begin(), end = tmp_list.end(); i != end; ++i) { - speedtest t(test_url); + speedtest t(test_url, *cfg); size_t sp = t.test(&(*i)); lists_mutex->lock(); std::list<config::static_proxy_entry>::iterator it = std::find(static_proxy_list->begin(), static_proxy_list->end(), *i); @@ -48,7 +47,7 @@ void speed_test_thread_func(config *cfg, int check_interval, std::list<config::p while(!logger) boost::this_thread::sleep(boost::posix_time::milliseconds(200)); logger->lock(); - *logger << time_str() << ": "<<i->host<<":"<<i->port<<"\t"<<sp<<"\n"; + *logger << time_str() << ": proxy "<<i->host<<":"<<i->port<<"\t speed "<<sp<<" (in speed_test_thread)\n"; logger->unlock(); } lists_mutex->unlock(); diff --git a/server/server/speedtest.cpp b/server/server/speedtest.cpp index 8a2c289..4d17f66 100644 --- a/server/server/speedtest.cpp +++ b/server/server/speedtest.cpp @@ -1,18 +1,19 @@ #include "headers.h" +extern logtofile *logger; + size_t speedtest::curl_data_callback(void *contents, size_t size, size_t nmemb, void *userp) //code from curl usage examples, may be slow { size_t realsize = size * nmemb; struct memory_struct *mem = (struct memory_struct *)userp; - mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); +/* mem->memory = (char*)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory == NULL) { - /* out of memory! */ - } + } */ - memcpy(&(mem->memory[mem->size]), contents, realsize); +// memcpy(&(mem->memory[mem->size]), contents, realsize); mem->size += realsize; - mem->memory[mem->size] = 0; +// mem->memory[mem->size] = 0; return realsize; } @@ -57,14 +58,14 @@ size_t speedtest::test(config::proxy_entry_base *p) boost::posix_time::ptime _t = boost::posix_time::second_clock::local_time(); CURLcode error = CURL_LAST; - for(int i = 0; error && (i < 3); i++) + for(int i = 0; error && (i < 4); i++) { if(i > 1) { if(type == CURLPROXY_SOCKS5_HOSTNAME) curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); if(type == CURLPROXY_SOCKS4A) - curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A); + curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4); } error = curl_easy_perform(curl); } @@ -77,7 +78,12 @@ size_t speedtest::test(config::proxy_entry_base *p) curl_easy_cleanup(curl); - free(chunk.memory); + //free(chunk.memory); + if(cfg.debug()) + { + while(!logger) + boost::this_thread::sleep(boost::posix_time::milliseconds(200)); + } size_t speed = 0; if(!error) { @@ -93,16 +99,37 @@ size_t speedtest::test(config::proxy_entry_base *p) p->speed_list.push_back(speed); while(p->speed_list.size() > 10) p->speed_list.pop_front(); - if(!p->speed_list.empty()) + size_t speed_sum = 0; + for(std::list<size_t>::iterator i = p->speed_list.begin(), end = p->speed_list.end(); i != end; ++i) + speed_sum += *i; + speed = speed_sum/p->speed_list.size(); + if(cfg.debug()) { - size_t speed_sum = 0; - for(std::list<size_t>::iterator i = p->speed_list.begin(), end = p->speed_list.end(); i != end; ++i) - speed_sum += *i; - speed = speed_sum/p->speed_list.size(); + logger->lock(); + *logger << time_str() << ": computed "<<speed<<" speed from "<<p->speed_list.size()<<" entries for "<<p->host<<":"<<p->port<<"\n"; + logger->unlock(); } } + else if(cfg.debug()) + { + logger->lock(); + *logger << time_str() << ": get 0 speed for "<<p->host<<":"<<p->port<<"\n"; + logger->unlock(); + } + } + else if(cfg.debug()) + { + logger->lock(); + *logger << time_str() << ": proxy check error ocured for "<<p->host<<":"<<p->port<<"\n"; + logger->unlock(); } p->speed = speed; + if(cfg.debug()) + { + logger->lock(); + *logger << time_str() << ": set speed "<<p->speed<<" for proxy "<<p->host<<":"<<p->port<<" (this should be sent and seen in client ui)\n"; + logger->unlock(); + } return speed; } diff --git a/server/server/speedtest.h b/server/server/speedtest.h index 95e9b89..1e976e2 100644 --- a/server/server/speedtest.h +++ b/server/server/speedtest.h @@ -1,17 +1,14 @@ #ifndef SPEEDTEST_H #define SPEEDTEST_H - +#include "headers.h" class speedtest { public: size_t test(config::proxy_entry_base*); - speedtest() : curl(NULL){} - speedtest(const std::string& url) : curl(NULL) - { - test_url = url; - } + speedtest(const std::string& url, config &c) : test_url(url), curl(NULL), cfg(c) + {} private: struct memory_struct { char *memory; @@ -20,6 +17,7 @@ private: static size_t curl_data_callback(void *contents, size_t size, size_t nmemb, void *userp); std::string test_url; CURL *curl; + config &cfg; }; |