@@ -27,7 +27,13 @@ xquery version "3.1";
27
27
module namespace log="http://exist-db.org/xquery/app/log" ;
28
28
29
29
import module namespace config="http://exist-db.org/xquery/apps/config" at "config.xqm" ;
30
- import module namespace scanrepo="http://exist-db.org/xquery/admin/scanrepo" at "scan.xqm" ;
30
+ import module namespace dbu="http://exist-db.org/xquery/utility/db" at "db-utility.xqm" ;
31
+
32
+ declare variable $log:base-collection := $config:logs-col;
33
+ declare variable $log:file-permission := map:merge ((
34
+ $dbu:default-permissions,
35
+ map { "mode" : "rw-rw-r--" }
36
+ ));
31
37
32
38
(:~
33
39
: Append entries to the structured application event log
@@ -37,53 +43,37 @@ import module namespace scanrepo="http://exist-db.org/xquery/admin/scanrepo" at
37
43
:)
38
44
declare function log:event ($event as element (event)) as empty-sequence () {
39
45
let $today := current-date ()
40
- let $log-collection-name := log:collection ($today)
41
- let $log-collection := $config:logs-col || "/" || $log-collection-name
46
+ let $log-collection := log:collection ($today)
42
47
let $log-document-name := log:document-name ($today)
43
- let $log-document := $log-collection || "/" || $log-document-name
44
- let $store-log :=
45
- if (doc-available ($log-document)) then
46
- update insert $event into doc ($log-document)/public-repo-log
47
- else
48
- (
49
- if (xmldb:collection-available ($log-collection)) then
50
- ()
51
- else
52
- log:mkcol ($config:logs-col, $log-collection-name),
53
- scanrepo:store ($log-collection, $log-document-name, element public-repo-log { $event })
54
- )
48
+
55
49
return
56
- ()
50
+ if (doc-available ($log-collection || "/" || $log-document-name))
51
+ then log:append-log ($log-collection, $log-document-name, $event)
52
+ else log:create-log ($log-collection, $log-document-name, $event)
57
53
};
58
54
59
- declare %private function log:collection ($date as xs:date) {
60
- format-date ($date, "[Y]/[M01]" )
55
+ declare %private
56
+ function log:append-log ($log-collection as xs:string, $log-document-name as xs:string, $event as element (event)) as empty-sequence () {
57
+ let $node := doc ($log-collection || "/" || $log-document-name)/public-repo-log
58
+ let $update := update insert $event into $node
59
+ return ()
61
60
};
62
61
63
- declare %private function log:document-name ($date as xs:date) {
64
- "public-repo-log-" || format-date ($date, "[Y]-[M01]-[D01]" ) || ".xml"
62
+ declare %private
63
+ function log:create-log ($log-collection as xs:string, $log-document-name as xs:string, $event as element (event)) as empty-sequence () {
64
+ dbu:ensure-collection ($log-collection)
65
+ => xmldb:store ($log-document-name, element public-repo-log { $event })
66
+ => dbu:set-permissions ($log:file-permission)
67
+ => log:return-empty ()
65
68
};
66
69
67
- (:~
68
- : Recursively create a collection hierarchy
69
- :)
70
- declare %private function log:mkcol ($collection as xs:string, $path as xs:string) {
71
- log:mkcol-recursive ($ collection, tokenize ($path , "/" ) )
70
+ declare %private
71
+ function log:return-empty ($item as item ()*) as empty-sequence () {};
72
+
73
+ declare %private function log:collection ($date as xs:date) as xs:string {
74
+ $ log:base- collection || "/" || format-date ($date , "[Y]/[M01]" )
72
75
};
73
76
74
- declare
75
- %private
76
- function log:mkcol-recursive ($collection as xs:string, $components as xs:string*) {
77
- if (exists ($components)) then
78
- let $newColl := concat ($collection, "/" , $components[1 ])
79
- return (
80
- xmldb:create-collection ($collection, $components[1 ]) !
81
- (
82
- sm:chgrp (xs:anyURI (.), config:repo-permissions ()?mode),
83
- .
84
- ),
85
- log:mkcol-recursive ($newColl, subsequence ($components, 2 ))
86
- )
87
- else
88
- ()
77
+ declare %private function log:document-name ($date as xs:date) as xs:string {
78
+ "public-repo-log-" || format-date ($date, "[Y]-[M01]-[D01]" ) || ".xml"
89
79
};
0 commit comments