X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffilter_limit.cpp;h=784f68a171a61e15f619567d63c711d968016363;hb=235ec6eb8e28884ca223a5d451aa83b18909acd9;hp=3158ee0146e41cf8bbb2ea6bd433f19b3a154e30;hpb=ddc156360c0c46ef669accde05fea1106cc6b244;p=metaproxy-moved-to-github.git diff --git a/src/filter_limit.cpp b/src/filter_limit.cpp index 3158ee0..784f68a 100644 --- a/src/filter_limit.cpp +++ b/src/filter_limit.cpp @@ -1,5 +1,5 @@ /* This file is part of Metaproxy. - Copyright (C) 2005-2009 Index Data + Copyright (C) 2005-2010 Index Data Metaproxy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -21,8 +21,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include -#include "package.hpp" -#include "util.hpp" +#include +#include +#include +#ifdef WIN32 +#include +#endif namespace mp = metaproxy_1; namespace yf = mp::filter; @@ -31,11 +35,12 @@ namespace metaproxy_1 { namespace filter { class Limit::Ses { public: - Yaz_bw bw_stat; - Yaz_bw pdu_stat; - Yaz_bw search_stat; + yazpp_1::TimeStat bw_stat; + yazpp_1::TimeStat pdu_stat; + yazpp_1::TimeStat search_stat; Ses() : bw_stat(60), pdu_stat(60), search_stat(60) {}; }; + class Limit::Impl { public: Impl(); @@ -43,10 +48,8 @@ namespace metaproxy_1 { void process(metaproxy_1::Package & package); void configure(const xmlNode * ptr); private: - boost::mutex m_session_mutex; std::map m_sessions; - int m_bw_max; int m_pdu_max; int m_search_max; @@ -166,9 +169,6 @@ void yf::Limit::Impl::process(mp::Package &package) } } - yaz_log(YLOG_LOG, "sz = %d . total = %d", sz, - ses->bw_stat.get_total()); - int bw_total = ses->bw_stat.get_total(); int pdu_total = ses->pdu_stat.get_total(); int search_total = ses->search_stat.get_total(); @@ -186,12 +186,19 @@ void yf::Limit::Impl::process(mp::Package &package) } } if (package.session().is_closed()) + { m_sessions.erase(package.session()); + delete ses; + } } if (reduce) { yaz_log(YLOG_LOG, "sleeping %d seconds", reduce); +#ifdef WIN32 + Sleep(reduce * 1000); +#else sleep(reduce); +#endif } } @@ -209,50 +216,6 @@ extern "C" { }; } -// bandwidth class (taken from YAZ Proxy) - -Yaz_bw::Yaz_bw(int sz) -{ - m_sec = 0; - m_size = sz; - m_bucket = new int[m_size]; - m_ptr = 0; -} - -Yaz_bw::~Yaz_bw() -{ - delete [] m_bucket; -} - -int Yaz_bw::get_total() -{ - add_bytes(0); - int bw = 0; - int i; - for (i = 0; i= m_sec) - { - int d = now - m_sec; - if (d > m_size) - d = m_size; - while (--d >= 0) - { - if (++m_ptr == m_size) - m_ptr = 0; - m_bucket[m_ptr] = 0; - } - m_bucket[m_ptr] += b; - } - m_sec = now; -} /* * Local variables: