source: trunk/src/rest_interface/admin-interface.lisp

Last change on this file was 743, checked in by lgiessmann, 13 years ago

trunk: xtm-exporter: fixed a bug that occurs when exporting empty stopres

File size: 3.5 KB
Line 
1;;+-----------------------------------------------------------------------------
2;;+  Isidorus
3;;+  (c) 2008-2010 Marc Kuester, Christoph Ludwig, Lukas Georgieff
4;;+
5;;+  Isidorus is freely distributable under the LLGPL license.
6;;+  You can find a detailed description in trunk/docs/LLGPL-LICENSE.txt and
7;;+  trunk/docs/LGPL-LICENSE.txt.
8;;+-----------------------------------------------------------------------------
9
10(in-package :rest-interface)
11
12;;TODO: add functions to export statement
13
14(defparameter *admin-local-backup* "/admin/local-backup")
15(defparameter *admin-remote-backup* "/admin/remote-backup")
16(defparameter *admin-shutdown* "/admin/shutdown")
17
18
19(defparameter *ready-to-die* nil)
20
21(defun set-up-admin-interface ()
22  (push
23   (create-regex-dispatcher *admin-local-backup* #'admin-local-backup)
24   hunchentoot:*dispatch-table*)
25  (push
26   (create-regex-dispatcher *admin-remote-backup* #'admin-remote-backup)
27   hunchentoot:*dispatch-table*)
28  (push
29   (create-regex-dispatcher *admin-shutdown* #'admin-shutdown)
30   hunchentoot:*dispatch-table*))
31
32
33
34(defun admin-shutdown()
35  (handler-case
36      (if (string= *shutdown-remote-address* (hunchentoot:remote-addr*))
37          (progn
38            (when elephant:*store-controller*
39              (xtm-exporter:export-as-xtm
40               (concat "backup_" (make-date-string (get-universal-time)) ".xtm")
41               :revision 0))
42            (shutdown-json-engine)
43            (shutdown-atom-engine)
44            (shutdown-admin-server)
45            (close-tm-store) ;in case the json and atom services are not running
46            (setf *ready-to-die* t))
47          (setf (hunchentoot:return-code*) hunchentoot:+http-forbidden+))
48    (condition (err)
49      (progn
50        (tools:close-tm-store)
51        (setf (hunchentoot:return-code*) hunchentoot:+http-internal-server-error+)
52        (setf (hunchentoot:content-type*) "text")
53        (format nil "closed the tm store, but:~%condition: \"~a\"" err)))))
54
55       
56
57
58(defun admin-local-backup()
59  (handler-case
60      (if (string= *local-backup-remote-address* (hunchentoot:remote-addr*))
61          (let ((destination-path
62                 (hunchentoot:url-decode (hunchentoot:get-parameter "path"))))
63            (xtm-exporter:export-as-xtm destination-path :revision 0))
64          (setf (hunchentoot:return-code*) hunchentoot:+http-forbidden+))
65    (condition (err)
66      (progn
67        (setf (hunchentoot:return-code*) hunchentoot:+http-internal-server-error+)
68        (setf (hunchentoot:content-type*) "text")
69        (format nil "Condition: \"~a\"" err)))))
70
71
72(defun admin-remote-backup()
73  (handler-case
74      (if (string= *remote-backup-remote-address* (hunchentoot:remote-addr*))
75          (progn (hunchentoot:url-decode (hunchentoot:get-parameter "path"))
76                 (setf (hunchentoot:content-type*) "application/xml")
77                 (xtm-exporter:export-as-xtm-string :revision 0))
78          (setf (hunchentoot:return-code*) hunchentoot:+http-forbidden+))
79    (condition (err)
80      (progn
81        (setf (hunchentoot:return-code*) hunchentoot:+http-internal-server-error+)
82        (setf (hunchentoot:content-type*) "text")
83        (format nil "Condition: \"~a\"" err)))))
84
85
86(defun make-date-string (universal-time)
87  (tools:concat
88   (write-to-string (nth-value 3 (decode-universal-time universal-time))) "."
89   (write-to-string (nth-value 4 (decode-universal-time universal-time))) "."
90   (write-to-string (nth-value 5 (decode-universal-time universal-time))) ":"
91   (write-to-string (nth-value 2 (decode-universal-time universal-time))) ":"
92   (write-to-string (nth-value 1 (decode-universal-time universal-time))) ":"
93   (write-to-string (nth-value 0 (decode-universal-time universal-time)))))
94
95
96
97(defun die-when-finished()
98  (do () (rest-interface:*ready-to-die*)
99    (sleep 1))
100  (sb-ext:quit))
Note: See TracBrowser for help on using the repository browser.