root/dev/common/admin/option_acache.php @ 440

Revision 440, 7.8 KB (checked in by kovell, 11 years ago)

Fixes: Week calculation now more reliable. Page cache cleared when disabled.

Line 
1<?php
2/*
3* This file contains the generic admin options in the new format
4* look here for some examples.
5*/
6options::cat('Advanced', 'Cache', 'Page Cache');
7options::fadd('Caching enabled', 'cache_enabled', 'checkbox','', array('admin_acache', 'clearPCache'));
8options::fadd('Cache lifetime (min)', 'cache_time', 'edit:size:4');
9options::fadd('Cache directory', 'cache_dir', 'edit:size:40');
10options::fadd('Ignore pages', 'cache_ignore', 'edit:size:60','','','page1,page2 [no spaces]');
11options::fadd('Page specific times', 'cache_times', 'edit:size:60','','','page:time,page2:time [no spaces]');
12options::fadd('Pages updated every kill', 'cache_update', 'edit:size:60','','','* or page1,page2 [no spaces]');
13
14options::cat('Advanced', 'Cache', 'Query Cache');
15options::fadd('Enable SQL-Query MemCache', 'cfg_memcache', 'checkbox');
16options::fadd('Memcached server', 'cfg_memcache_server', 'edit:size:50');
17options::fadd('Memcached port', 'cfg_memcache_port', 'edit:size:8');
18options::fadd('Halt on SQLError', 'cfg_sqlhalt', 'checkbox');
19options::fadd('Enable SQL-Query File Cache', 'cfg_qcache', 'checkbox', '', array('admin_acache', 'clearQCache'));
20
21options::cat('Advanced', 'Cache', 'Killmail Cache');
22options::fadd('Killmail Caching enabled','km_cache_enabled','checkbox');
23options::fadd('Killmail Cache directory', 'km_cache_dir', 'edit:size:40');
24options::fadd('Cached Killmails', 'none', 'custom', array('admin_acache', 'getKillmails'));
25
26options::cat('Advanced', 'Cache', 'Reinforce Control');
27options::fadd('Enable Reinforced Management', 'auto_reinforced', 'checkbox', '', array('admin_acache', 'setNotReinforced'));
28options::fadd('Current Load', 'none', 'custom', array('admin_acache', 'showLoad'));
29options::fadd('Reinforcement threshold', 'reinforced_threshold', 'edit:size:4');
30options::fadd('Disabling threshold', 'reinforced_disable_threshold', 'edit:size:4');
31options::fadd('Reinforcement chance (1/x)', 'reinforced_prob', 'edit:size:4');
32options::fadd('Reinforcement end chance (1/x)', 'reinforced_rf_prob', 'edit:size:4');
33
34options::cat('Advanced', 'Cache', 'Clear Caches');
35options::fadd('Page Cache', 'none', 'custom', array('admin_acache', 'optionClearPage'), array('admin_acache', 'clearCaches'));
36options::fadd('Template Cache', 'none', 'custom', array('admin_acache', 'optionClearTemplate'), array('admin_acache', 'clearCaches'));
37//options::fadd('Mail Cache', 'none', 'custom', array('admin_acache', 'optionClearMail'), array('admin_acache', 'clearCaches'));
38options::fadd('SQL Query Cache', 'none', 'custom', array('admin_acache', 'optionClearSQL'), array('admin_acache', 'clearCaches'));
39options::fadd('Kill Summary Cache', 'none', 'custom', array('admin_acache', 'optionClearSum'), array('admin_acache', 'clearCaches'));
40options::fadd('All Caches', 'none', 'custom', array('admin_acache', 'optionClearAll'), array('admin_acache', 'clearCaches'));
41
42class admin_acache
43{
44    function showLoad()
45    {
46        $load = @file_get_contents('/proc/loadavg');
47        if (false === $load)
48        {
49            return "Your web host does not allow access to the load metric. Reinforced mode will not work.";
50        }
51        else
52        {
53            $array = explode(' ', $load);
54            return (float)$array[0];
55        }
56    }
57
58    function getKillmails()
59    {
60                $count = 0;
61                if (config::get('km_cache_dir'))
62                {
63                        $dir   = config::get('km_cache_dir');
64                        if(is_dir($dir))
65                        {
66                                if($handle = opendir($dir))
67                                {
68                                        while(($file = readdir($handle)) !== false)
69                                        {
70                                                if (!is_dir($file)) $count++;
71                                        }
72                                        closedir($handle);
73                                }
74                        }
75                }
76                return $count;
77    }
78    function clearPCache()
79    {
80                admin_acache::removeOld(0, KB_CACHEDIR.'/'.KB_SITE, false);
81    }
82    function clearQCache()
83    {
84                $dir = opendir(KB_CACHEDIR);
85                while ($line = readdir($dir))
86                {
87                        if (strstr($line, 'qcache_qry') !== false)
88                        {
89                                @unlink(KB_CACHEDIR.'/'.$line);
90                        }
91                        elseif (strstr($line, 'qcache_tbl') !== false)
92                        {
93                                @unlink(KB_CACHEDIR.'/'.$line);
94                        }
95                }
96    }
97    function setNotReinforced()
98    {
99            config::set('is_reinforced', '0');
100    }
101        function optionClearPage()
102        {
103                return '<input type="checkbox" name="option[clear_page]">Clear cache ?';
104        }
105        function optionClearMail()
106        {
107                return '<input type="checkbox" name="option[clear_mail]">Clear cache ?';
108        }
109        function optionClearSum()
110        {
111                return '<input type="checkbox" name="option[clear_sum]">Clear cache ?';
112        }
113        function optionClearSQL()
114        {
115                return '<input type="checkbox" name="option[clear_sql]">Clear cache ?';
116        }
117        function optionClearTemplate()
118        {
119                return '<input type="checkbox" name="option[clear_template]">Clear cache ?';
120        }
121        function optionClearAll()
122        {
123                return '<input type="checkbox" name="option[clear_all]">Clear cache ?';
124        }
125        function clearCaches()
126        {
127        if ($_POST['option']['clear_page'] == 'on')
128        {
129                        admin_acache::removeOld(0, KB_CACHEDIR.'/'.KB_SITE, false);
130                        $_POST['option']['clear_page'] = 'off';
131        }
132        if ($_POST['option']['clear_template'] == 'on')
133        {//hardcoded in index.php
134                        admin_acache::removeOld(0, 'cache/templates_c', false);
135                        $_POST['option']['clear_template'] == 'off';
136        }
137        if ($_POST['option']['clear_mail'] == 'on')
138        {
139                        admin_acache::removeOld(0, config::get('km_cache_dir'), false);
140                        $_POST['option']['clear_mail'] == 'off';
141        }
142        if ($_POST['option']['clear_sum'] == 'on')
143        {
144                        $qry = new DBQuery();
145                        $qry->execute("DELETE FROM kb3_sum_alliance");
146                        $qry->execute("DELETE FROM kb3_sum_corp");
147                        $qry->execute("DELETE FROM kb3_sum_pilot");
148                        // Clear page and query cache as well since they also contain the
149                        // summaries.
150                        admin_acache::clearQCache();
151                        admin_acache::removeOld(0, KB_CACHEDIR.'/'.KB_SITE, false);
152                        $_POST['option']['clear_sum'] == 'off';
153        }
154        if ($_POST['option']['clear_sql'] == 'on')
155        {
156                        admin_acache::clearQCache();
157                        // Also clear the page cache since it will have cached the results
158                        // of the file cache
159                        admin_acache::removeOld(0, KB_CACHEDIR.'/'.KB_SITE, false);
160                        $_POST['option']['clear_sql'] == 'off';
161        }
162        if ($_POST['option']['clear_all'] == 'on')
163        {
164                        admin_acache::removeOld(0, KB_CACHEDIR.'/'.KB_SITE, false);
165                        admin_acache::removeOld(0, 'cache/templates_c', false);
166                        admin_acache::removeOld(0, config::get('km_cache_dir'), false);
167                        admin_acache::clearQCache();
168                        admin_acache::removeOld(0, 'cache/portraits', false);
169                        admin_acache::removeOld(0, 'cache/data', false);
170                        admin_acache::removeOld(0, 'cache/map', false);
171                        admin_acache::removeOld(0, 'cache/api', false);
172                        admin_acache::removeOld(0, 'cache/corp', false);
173                        $qry = new DBQuery();
174                        $qry->execute("DELETE FROM kb3_sum_alliance");
175                        $qry->execute("DELETE FROM kb3_sum_corp");
176                        $qry->execute("DELETE FROM kb3_sum_pilot");
177                        $_POST['option']['clear_all'] == 'off';
178        }
179                return;
180        }
181        function removeOld($hours, $dir, $recurse = false)
182        {
183                if(!session::isAdmin()) return false;
184                if(strpos($dir, '.') !== false) return false;
185                //$dir = KB_CACHEDIR.'/'.$dir;
186                if(!is_dir($dir)) return false;
187                if(substr($dir,-1) != '/') $dir = $dir.'/';
188                $seconds = $hours*60*60;
189                $files = scandir($dir);
190
191                foreach ($files as $num => $fname)
192                {
193                        if (file_exists("{$dir}{$fname}") && !is_dir("{$dir}{$fname}") && substr($fname,0,1) != "." && ((time() - filemtime("{$dir}{$fname}")) > $seconds))
194                        { 
195                                $mod_time = filemtime("{$dir}{$fname}");
196                                if (unlink("{$dir}{$fname}")) $del = $del + 1;
197                        }
198                        if ($recurse && file_exists("{$dir}{$fname}") && is_dir("{$dir}{$fname}")
199                                 && substr($fname,0,1) != "." && $fname !== ".." )
200                        {
201                                $del = $del + admin_acache::remove_old($hours, $dir.$fname."/");
202                        }
203                }
204                return $del;
205        }
206}
207?>
Note: See TracBrowser for help on using the browser.