Overview

Namespaces

  • Mapbender
    • Component
      • HTTP
    • CoreBundle
      • Command
      • Component
        • Exception
      • Controller
      • DataFixtures
        • ORM
      • DependencyInjection
      • Element
        • Type
      • Entity
      • EventListener
      • Extension
      • Form
        • DataTransformer
        • EventListener
        • Type
      • Security
      • Template
    • KmlBundle
      • Element
    • ManagerBundle
      • Controller
      • Form
        • DataTransformer
        • Type
    • MonitoringBundle
      • Command
      • Component
      • Controller
      • DependencyInjection
      • Entity
      • EventListener
      • Form
    • PrintBundle
      • Component
      • Controller
    • WmcBundle
      • Component
        • Exception
      • Element
        • Type
      • Entity
      • Form
        • Type
    • WmsBundle
      • Component
        • Exception
      • Controller
      • DependencyInjection
      • Element
        • Type
      • Entity
      • Event
      • Form
        • EventListener
        • Type
    • WmtsBundle
      • Component
        • Exception
      • Controller
      • Entity
      • Form
        • Type
  • None
  • PHP

Classes

  • MonitoringDefinitionController
  • MonitoringJobController
  • SchedulerProfileController
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  • Todo
  • Download
  1: <?php
  2: namespace Mapbender\MonitoringBundle\Controller;
  3: 
  4: use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  5: use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  6: use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  7: use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  8: use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  9: use Symfony\Component\Form\FormBuilder;
 10: use Symfony\Component\DependencyInjection\ContainerInterface;
 11: use Symfony\Component\Security\Core\SecurityContext;
 12: use Mapbender\MonitoringBundle\Entity\SchedulerProfile;
 13: use Mapbender\MonitoringBundle\Form\SchedulerProfileType;
 14: 
 15: /**
 16:  * Description of SchedulerProfileController
 17:  *
 18:  * @author Paul Schmidt
 19:  */
 20: class SchedulerProfileController extends Controller {
 21:     
 22:     private static $CMD = "console monitoring:scheduler run schedulerprofilecontroller";
 23:     
 24:     protected function generateCmd(){
 25:         $dir = $this->container->getParameter("kernel.root_dir");
 26:         $cmd = $dir."/".SchedulerProfileController::$CMD;
 27:         return $cmd;
 28:     }
 29:     
 30:     /**
 31:      * @Route("/scheduler/start/")
 32:      * @Method("GET")
 33:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:index.html.twig")
 34:      */
 35:     public function startAction() {
 36:         
 37:         $result = $this->getProcess($this->generateCmd());
 38:         
 39:         if(count($result) == 0){
 40:             $cmd_full = $this->generateCmd()." > /tmp/stdout &";
 41:             $res = exec($cmd_full);
 42:             sleep(3);
 43:         }
 44:         $query = $this->getDoctrine()->getEntityManager()->createQuery(
 45:                 'SELECT sp FROM MapbenderMonitoringBundle:SchedulerProfile sp'
 46:                 .' ORDER BY sp.title ASC');
 47:         $schedulers = $query->getResult();
 48:         return array(
 49:             "nowtime" => new \DateTime(),
 50:             "schedulers" => $schedulers,
 51:             "process" => $this->getProcessStatus($this->generateCmd())
 52: 
 53:         );
 54:     }
 55:     
 56:     /**
 57:      * @Route("/scheduler/stop/")
 58:      * @Method("GET")
 59:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:index.html.twig")
 60:      */
 61:     public function stopAction() {
 62:         $this->stopScheduler();
 63:         $query = $this->getDoctrine()->getEntityManager()->createQuery(
 64:                 'SELECT sp FROM MapbenderMonitoringBundle:SchedulerProfile sp'
 65:                 .' ORDER BY sp.title ASC');
 66:         $schedulers = $query->getResult();
 67:         return array(
 68:             "nowtime" => new \DateTime(),
 69:             "schedulers" => $schedulers,
 70:             "process" => $this->getProcessStatus($this->generateCmd())
 71:         );
 72:     }
 73:     
 74:     protected function stopScheduler(){
 75:         $result = $this->getProcess($this->generateCmd());
 76: 
 77:         foreach ($result as $process) {
 78:             $cmd_kill = "kill -9 ".$process["PID"];
 79:             $res = exec($cmd_kill);
 80:             $sp = $this->getDoctrine()
 81:                     ->getRepository('Mapbender\MonitoringBundle\Entity\SchedulerProfile')
 82:                     ->findOneByCurrent(true);
 83:             $sp->setStatus(SchedulerProfile::$STATUS_ABORTED);
 84:             $em = $this->getDoctrine()->getEntityManager();
 85:             $em->persist($sp);
 86:             $em->flush();
 87:         }
 88:     }
 89:     
 90:     /**
 91:      * @Route("/scheduler/")
 92:      * @Method("GET")
 93:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:index.html.twig")
 94:      */
 95:     public function indexAction() {
 96:         $query = $this->getDoctrine()->getEntityManager()->createQuery(
 97:                 'SELECT sp FROM MapbenderMonitoringBundle:SchedulerProfile sp'
 98:                 .' ORDER BY sp.title ASC');
 99:         $schedulers = $query->getResult();
100:         return array(
101:             "nowtime" => new \DateTime(),
102:             "schedulers" => $schedulers,
103:             "process" => $this->getProcessStatus($this->generateCmd())
104:         );
105:     }
106:     
107:     /**
108:      * @Route("/scheduler/new/")
109:      * @Method("GET")
110:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:edit.html.twig")
111:      */
112:     public function shownewAction() {
113:         $sp = new SchedulerProfile();
114: //        $form = $this->getNewForm($sp);
115:         $form = $this->get("form.factory")->create(
116:                 new SchedulerProfileType($sp),
117:                 new SchedulerProfile());
118:         return array('form' => $form->createView(), "scheduler" => $sp);
119:     }
120:     
121:      /**
122:      * @Route("/scheduler/new/")
123:      * @Method("POST")
124:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:edit.html.twig")
125:      */
126:     public function newAction() {
127:         $scheduler_req = new SchedulerProfile();
128: //        $form = $this->getNewForm($scheduler_req);
129:         $form = $this->get("form.factory")->create(
130:                 new SchedulerProfileType($scheduler_req), $scheduler_req);
131:         $form->bindRequest($this->get('request'));
132:         if($form->isValid()) {
133:             if($scheduler_req->getCurrent()){
134:                 $this->stopScheduler();
135:                 $this->deactivateAllScheduler();
136:             }
137:             $em = $this->getDoctrine()->getEntityManager();
138:             $em->persist($scheduler_req);
139:             $em->flush();
140:             $query = $this->getDoctrine()->getEntityManager()->createQuery(
141:                     'SELECT sp FROM MapbenderMonitoringBundle:SchedulerProfile sp'
142:                     .' ORDER BY sp.title ASC');
143:             $schedulers = $query->getResult();
144:             return $this->render(
145:                     'MapbenderMonitoringBundle:SchedulerProfile:index.html.twig',
146:                     array(
147:                         "nowtime" => new \DateTime(),
148:                         "schedulers" => $schedulers,
149:                         "process" => $this->getProcessStatus($this->generateCmd())));
150:         }
151:         return array('form' => $form->createView(), "scheduler" => $scheduler_req);
152:     }
153:     
154:     /**
155:      * @Route("/scheduler/delete/{spId}")
156:      * @Method("GET")
157:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:confirmdelete.html.twig")
158:      */
159:     public function confirmdeleteAction(SchedulerProfile $sp) {
160:         
161:         return array("sp" => $sp);
162:     }
163:     
164:     /**
165:      * @Route("/scheduler/delete/{spId}")
166:      * @Method("POST")
167:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:index.html.twig")
168:      */
169:     public function deleteAction(SchedulerProfile $sp) {
170:         $em = $this->getDoctrine()->getEntityManager();
171:         $em->remove($sp);
172:         $em->flush();
173:         $query = $this->getDoctrine()->getEntityManager()->createQuery(
174:                 'SELECT sp FROM MapbenderMonitoringBundle:SchedulerProfile sp'
175:                 .' ORDER BY sp.title ASC');
176:         $schedulers = $query->getResult();
177:         return array(
178:             "nowtime" => new \DateTime(),
179:             "schedulers" => $schedulers,
180:             "process" => $this->getProcessStatus($this->generateCmd()));
181:     }
182:     
183:     /**
184:      * @Route("/scheduler/current/{spId}")
185:      * @Method("GET")
186:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:index.html.twig")
187:      */
188:     public function currentAction(SchedulerProfile $sp) {
189:         $this->stopScheduler();
190:         $this->deactivateAllScheduler();
191:         $em = $this->getDoctrine()->getEntityManager();
192:         $sp->setCurrent(true);
193:         $em->persist($sp);
194:         $em->flush();
195:         $query = $this->getDoctrine()->getEntityManager()->createQuery(
196:                 'SELECT sp FROM MapbenderMonitoringBundle:SchedulerProfile sp'
197:                 .' ORDER BY sp.title ASC');
198:         $schedulers = $query->getResult();
199:         return array(
200:             "nowtime" => new \DateTime(),
201:             "schedulers" => $schedulers,
202:             "process" => $this->getProcessStatus($this->generateCmd()));
203:     }
204:     
205:     /**
206:      * @Route("/scheduler/edit/{spId}")
207:      * @Method("GET")
208:      * @Template("MapbenderMonitoringBundle:SchedulerProfile:edit.html.twig")
209:      */
210:     public function showeditAction(SchedulerProfile $sp) {
211: //        $form = $this->getNewForm($sp);
212:         $form = $this->get("form.factory")->create(
213:             new SchedulerProfileType($sp), $sp);
214:         return array('form' => $form->createView(), "scheduler" => $sp);
215:     }
216:     /**
217:     * @Route("/scheduler/edit/{spId}")
218:     * @Method("POST")
219:     * @Template("MapbenderMonitoringBundle:SchedulerProfile:edit.html.twig")
220:     */
221:     public function editAction(SchedulerProfile $sp) {
222:         $form = $this->get("form.factory")->create(
223:             new SchedulerProfileType($sp),
224:             $sp);
225:         $form->bindRequest($this->get('request'));
226:         if($form->isValid()) {
227:             if($sp->getCurrent()){
228:                 $this->stopScheduler();
229:                 $this->deactivateAllScheduler();
230:                 $sp->setCurrent(true);
231:             }
232:             
233:             $em = $this->getDoctrine()->getEntityManager();
234:             $em->persist($sp);
235:             $em->flush();
236:             $query = $this->getDoctrine()->getEntityManager()->createQuery(
237:                 'SELECT sp FROM MapbenderMonitoringBundle:SchedulerProfile sp'
238:                     .' ORDER BY sp.title ASC');
239:             $schedulers = $query->getResult();
240:             return $this->render(
241:                     'MapbenderMonitoringBundle:SchedulerProfile:index.html.twig',
242:                     array(
243:                         "nowtime" => new \DateTime(),
244:                         "schedulers" => $schedulers,
245:                         "process" => $this->getProcessStatus($this->generateCmd())));
246:         }
247:         return array('form' => $form->createView(), "scheduler" => $sp);
248:     }
249:     
250:     protected function deactivateAllScheduler() {
251:         $schedulers = $this->getDoctrine()->getRepository(
252:                 "MapbenderMonitoringBundle:SchedulerProfile")->findAll();
253:         if($schedulers !== null){
254:             $em = $this->getDoctrine()->getEntityManager();
255:             foreach ($schedulers as $schedulerHelp) {
256:                 $schedulerHelp->setCurrent(false);
257:                 $em->persist($schedulerHelp);
258:                 $em->flush();
259:             }
260:         }
261:     }
262:     
263:     protected function getProcessStatus($cmd) {
264:         $result = $this->getProcess($cmd);
265:         
266:         if(count($result) > 0){
267:             return "running";
268:         } else
269:             return "not running";
270:     }
271:     
272:     protected function getProcess($cmd) {
273:         $res_int = -1;
274:         $res_arr = array();
275:         $res = exec("ps -aux ", $res_arr, $res_int);
276:         $teststr = $cmd;
277:         $result = array();
278:         $num = 0;
279:         $header = array();
280:         foreach ($res_arr as $value) {
281:             if($num == 0){
282:                 $header = preg_split ("/[\s]+/", $value);
283:             } else {
284:                 $pos = strpos ($value , $teststr);
285:                 if($pos!== false){
286:                     $help = preg_split ("/[\s]+/", $value);
287:                     $temp = array();
288:                     for($i = 0; $i < count($header); $i++) {
289:                         $temp[$header[$i]] = $help[$i];
290:                     }
291:                     $result[] = $temp;
292:                 }
293:             }
294:             $num++;
295:         }
296:         return $result;
297:     }
298:     
299:     protected function getCurrentScheduler() {
300:         return $this->getDoctrine()->getRepository(
301:                 "MapbenderMonitoringBundle:SchedulerProfile")->findBy(array('current' => true));
302:     }
303:     
304: //    /**
305: //   * @Route("/scheduler/test/")
306: //   * @Method("GET")
307: //   * @Template("MapbenderMonitoringBundle:SchedulerProfile:index.html.twig")
308: //   */
309: //  public function testAction() {
310: //                $run = true;
311: //                $num = 0;
312: //                $sp_start = $this->get("doctrine")
313: //                            ->getRepository('Mapbender\MonitoringBundle\Entity\SchedulerProfile')
314: //                            ->findOneByCurrent(true);
315: //                if($sp_start != null){
316: //                    $sp_start->setLaststarttime(null);
317: //                    $sp_start->setLastendtime(null);
318: //                    $sp_start->setNextstarttime(null);
319: //                    $this->get("doctrine")
320: //                            ->getEntityManager()->persist($sp_start);
321: //                    $this->get("doctrine")
322: //                            ->getEntityManager()->flush();
323: //                }
324: //                
325: //                while($run){
326: //                    $num ++;
327: //                    $sp = $this->get("doctrine")
328: //                            ->getRepository('Mapbender\MonitoringBundle\Entity\SchedulerProfile')
329: //                            ->findOneByCurrent(true);
330: //                    if($sp != null && $sp_start->getId() == $sp->getId()){
331: ////                        $timestamp_act = time();
332: //                        $now =  new \DateTime(date("Y-m-d H:i:s", time()));
333: //                            $hour_sec = 3600;
334: //                            $sleepbeforestart = 0;
335: //                            if($sp->getNextstarttime() === null) { // first time
336: //                                if($sp->getStarttime() > $now){
337: //                                    $sleepbeforestart = date_timestamp_get($sp->getStarttime()) - date_timestamp_get($now);
338: //                                    $sp->setNextstarttime(new \DateTime(date("Y-m-d H:i:s",date_timestamp_get($sp->getStarttime()))));
339: //                                } else {
340: //                                    $sleepbeforestart = $hour_sec * 24 - (date_timestamp_get($now) - date_timestamp_get($sp->getStarttime()));
341: //                                    $sp->setNextstarttime(new \DateTime(date("Y-m-d H:i:s",date_timestamp_get($now) + $sleepbeforestart)));
342: //                                }
343: //                            } else {
344: //                                if($sp->getNextstarttime() <= $now){
345: //                                    $nextstarttime_stamp =  date_timestamp_get($sp->getNextstarttime());
346: //                                    $now_stamp =  date_timestamp_get($now);
347: //                                    while($nextstarttime_stamp < $now_stamp){
348: //                                        $nextstarttime_stamp += $sp->getStarttimeinterval();
349: //                                    }
350: ////                                    $sleepbeforestart = date_timestamp_get($nextstarttime) - date_timestamp_get($now);
351: //                                    $sp->setNextstarttime(null);
352: //                                    $sp->setNextstarttime(new \DateTime(date("Y-m-d H:i:s", $nextstarttime_stamp)));
353: //                                }
354: //                                $sleepbeforestart = date_timestamp_get($sp->getNextstarttime()) - date_timestamp_get($now);
355: //                            }
356: //                            $sp->setStatusWaitstart();
357: //                            $this->get("doctrine")
358: //                                    ->getEntityManager()->persist($sp);
359: //                            $this->get("doctrine")
360: //                                    ->getEntityManager()->flush();
361: //                            // sleep
362: ////                            sleep($sleepbeforestart);
363: //                            $now =  new \DateTime(date("Y-m-d H:i:s", time()));
364: //                            $sp->setLaststarttime($sp->getNextstarttime());
365: //                            $sp->setNextstarttime(null);
366: //                            $sp->setNextstarttime(new \DateTime(date("Y-m-d H:i:s", date_timestamp_get($sp->getLaststarttime()) + $sp->getStarttimeinterval())));
367: //                            $this->get("doctrine")
368: //                                    ->getEntityManager()->persist($sp);
369: //                            $this->get("doctrine")
370: //                                    ->getEntityManager()->flush();
371: ////                            $this->runCommandII($input, $output, $sp);
372: ////                            $now =  new \DateTime(date("Y-m-d H:i:s", time()));
373: //                            $sp->setLastendtime(new \DateTime(date("Y-m-d H:i:s", time())));
374: //                            $this->get("doctrine")
375: //                                    ->getEntityManager()->persist($sp);
376: //                            $this->get("doctrine")
377: //                                    ->getEntityManager()->flush();
378: //
379: //                    } else {
380: //                        // $sp null
381: //                         $run = false;
382: //                    }
383: //                    if($num == 3)
384: //                        $run = false;
385: //                }
386: //                
387: //      $query = $this->getDoctrine()->getEntityManager()->createQuery(
388: //                'SELECT sp FROM MapbenderMonitoringBundle:SchedulerProfile sp'
389: //                .' ORDER BY sp.title ASC');
390: //        $schedulers = $query->getResult();
391: //      return array(
392: //            "nowtime" => new \DateTime(),
393: //            "schedulers" => $schedulers,
394: //            "process" => $this->getProcessStatus($this->generateCmd()));
395: //  }
396: }
Mapbender3 API documenation API documentation generated by ApiGen 2.8.0