;;======================================================================
;; Copyright 2019, Matthew Welland.
;;
;; This file is part of Megatest.
;;
;; Megatest 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 Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; Megatest is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with Megatest. If not, see <http://www.gnu.org/licenses/>.
;;======================================================================
(declare (unit megamod))
(declare (uses stml2))
(declare (uses mtargs))
(declare (uses commonmod))
(declare (uses apimod))
(declare (uses keysmod))
(declare (uses dbmod))
(declare (uses ducttape-lib))
(declare (uses itemsmod))
(declare (uses mtconfigf))
(declare (uses odsmod))
(declare (uses pgdbmod))
(declare (uses pkts))
(declare (uses rmtmod))
(declare (uses mtmod))
(declare (uses servermod))
(declare (uses tasksmod))
(declare (uses testsmod))
(declare (uses subrunmod))
(declare (uses itemsmod))
(declare (uses runsmod))
(module megamod
*
(import scheme chicken.base)
(import
(prefix base64 base64:)
(prefix dbi dbi:)
;; (prefix nanomsg nmsg:)
(prefix sqlite3 sqlite3:)
call-with-environment-variables
;;csv
;;csv-xml
;;data-structures
directory-utils
dot-locking
;;extras
chicken.file
chicken.condition
chicken.process-context
chicken.process-context.posix
chicken.process
chicken.random
chicken.string
fmt
chicken.format
system-information
hostinfo
http-client
intarweb
chicken.irregex
matchable
md5
message-digest
pathname-expand
;; pkts
chicken.port
;; queue
regex
regex-case
s11n
sparse-vectors
spiffy
spiffy-directory-listing
spiffy-request-vars
sql-de-lite
srfi-1
srfi-4
srfi-13
srfi-18
srfi-69
stack
;;tcp
typed-records
;;udp
uri-common
z3
)
(import (prefix mtconfigf configf:))
(define read-config configf:read-config)
(define find-and-read-config configf:find-and-read-config)
;; (define config:eval-string-in-environment configf:eval-string-in-environment)
(import spiffy)
(import stml2)
(import (prefix mtargs args:))
;; Order here is important!
(import commonmod)
(import keysmod)
(import pgdbmod)
(import tasksmod)
(import dbmod)
(import apimod)
(import ducttape-lib)
(import itemsmod)
(import pkts)
(import rmtmod)
(import mtmod)
(import testsmod)
(import servermod)
(import subrunmod)
(import itemsmod)
(import runsmod)
;; (use (prefix ulex ulex:))
(include "common_records.scm")
(include "db_records.scm")
(include "key_records.scm")
(include "run_records.scm")
(include "task_records.scm")
(include "test_records.scm")
;; (include "vg_records.scm")
;;======================================================================
;; L O C K I N G M E C H A N I S M S
;;======================================================================
;; globals
(define *exit-started* #f)
(define *last-monitor-update-time* 0)
(define *default-log-port* (current-error-port))
;; The watchdog is to keep an eye on things like db sync etc.
;;
;; TODO: for multiple areas, we will have multiple watchdogs; and multiple threads to manage
;; Moved watchdog back to megatest.scm
#;(define *watchdog* (make-thread
(lambda ()
(handle-exceptions
exn
(begin
(print-call-chain)
(print " message: " ((condition-property-accessor 'exn 'message) exn)))
(common:watchdog)))
"Watchdog thread"))
(include "archive-inc.scm")
(include "client-inc.scm")
(include "env-inc.scm")
(include "portlogger-inc.scm")
(include "process-inc.scm") ;; L6
(include "runconfig-inc.scm")
)
;; http-transport:server-dat definition moved to common_records.scm
;; bunch of small functions factored out of send-receive to make debug easier