Megatest

Check-in [da6d7b6655]
Login
Overview
Comment:portlogger tweaks
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | v1.65-multi-db
Files: files | file ages | folders
SHA1: da6d7b66552aac978cb586e2851fb56dfd167326
User & Date: matt on 2019-02-02 18:54:42
Other Links: branch diff | manifest | tags
Context
2019-02-02
18:55
Merged changes from v1.65 check-in: 3484aad005 user: matt tags: v1.65-multi-db
18:54
portlogger tweaks check-in: da6d7b6655 user: matt tags: v1.65-multi-db
07:55
Converted portlogger to a module, adjusted Makefile accordingly check-in: b0a3cd70ab user: matt tags: v1.65-multi-db
Changes

Modified Makefile from [7fc24d5f72] to [bb3be19627].

406
407
408
409
410
411
412
413
414


415
416
417
418
419
420
421
406
407
408
409
410
411
412


413
414
415
416
417
418
419
420
421







-
-
+
+







	if  csi -ne '(use mysql-client)';then \
           echo "(use mysql-client)(hash-table-set! *available-db* 'mysql #t)" >> altdb.scm; \
	fi
	if csi -ne '(use postgresql)';then \
	   echo "(use postgresql)(hash-table-set! *available-db* 'postgresql #t)" >> altdb.scm;\
	fi

portlogger-example : portlogger-example.scm api.o archive.o client.o common.o configf.o dashboard-tests.o dashboard-context-menu.o db.o dcommon.o ezsteps.o filedb.o genexample.o gutils.o http-transport.o items.o keys.o launch.o lock-queue.o margs.o megatest-version.o mt.o ods.o portlogger.o process.o rmt.o runconfig.o runs.o sdb.o server.o synchash.o tasks.o tdb.o tests.o tree.o
	csc $(CSCOPTS) portlogger-example.scm api.o archive.o client.o common.o configf.o dashboard-tests.o dashboard-context-menu.o db.o dcommon.o ezsteps.o filedb.o genexample.o gutils.o http-transport.o items.o keys.o launch.o lock-queue.o margs.o megatest-version.o mt.o ods.o portlogger.o process.o rmt.o  runconfig.o runs.o sdb.o server.o synchash.o tasks.o tdb.o tests.o tree.o
portlogger-example : portlogger-example.scm portlogger.o
	csc $(CSCOPTS) portlogger-example.scm portlogger.o

# create a pdf dot graphviz diagram from notations in rmt.scm
rmt.pdf : rmt.scm
	grep ';;DOT' rmt.scm | sed -e 's/.*;;DOT //' > rmt.dot;dot -Tpdf rmt.dot -o rmt.pdf

buildmanual:
	cd docs/manual && make

Modified megatest.scm from [35ba0a4899] to [a17c516bda].

2174
2175
2176
2177
2178
2179
2180

2181
2182
2183
2184
2185
2186
2187
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188







+







	   (else
	    (begin
	      (set! *db* dbstruct)
	      (import extras) ;; might not be needed
	      ;; (import csi)
	      (import readline)
	      (import apropos)
	      (import portlogger)
	      ;; (import (prefix sqlite3 sqlite3:)) ;; doesn't work ...

	      (if *use-new-readline*
		  (begin
		    (install-history-file (get-environment-variable "HOME") ".megatest_history") ;;  [homedir] [filename] [nlines])
		    (current-input-port (make-readline-port "megatest> ")))
		  (begin

Modified portlogger-example.scm from [79b0759ae8] to [075b5430bd].

13
14
15
16
17
18
19








20
21
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29







+
+
+
+
+
+
+
+


;;     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 (uses portlogger))
(import portlogger)
(use trace (prefix sqlite3 sqlite3:))
(trace
 portlogger:open-db
 portlogger:take-port
 portlogger:open-run-close
 sqlite3:execute
 )

(print (apply portlogger:main (cdr (argv))))

Modified portlogger.scm from [9dcb9ddb36] to [6ef6750d8e].

32
33
34
35
36
37
38
39

40
41
42
43
44



45
46
47
48
49
50
51
52
53




54


55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74

75
76
77
78
79
80
81
32
33
34
35
36
37
38

39
40
41



42
43
44
45
46
47
48
49
50
51


52
53
54
55
56
57
58
59
60
61

62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

77
78
79
80
81
82
83
84







-
+


-
-
-
+
+
+







-
-
+
+
+
+

+
+



-















-
+







  portlogger:set-port
  portlogger:release-port
  portlogger:set-failed
  portlogger:is-port-in-use
  portlogger:main
)
 
(import scheme posix chicken data-structures)
(import scheme posix chicken data-structures ports)

(require-extension (srfi 18) extras tcp s11n)
(import srfi-1 posix srfi-69 hostinfo dot-locking z3 regex)
(import (prefix sqlite3 sqlite3:))
(import (prefix mtconfigf configf:))
(use srfi-1 posix srfi-69 hostinfo dot-locking z3 regex)
(use (prefix sqlite3 sqlite3:))
(use (prefix mtconfigf configf:))

;; lsof -i

(define *configdat* #f)
(define (portlogger:set-configdat! cfgdat)
  (set! *configdat* cfgdat))

(define (debug:print . params)
  (apply print params))
(define (debug:print level port . params)
  (with-output-to-port
      port
    (lambda ()(apply print params))))
(define debug:print-error debug:print)
(define *default-log-port* (current-error-port))

(define (portlogger:set-printers! pdebug pdebugerr)
  (set! debug:print pdebug)
  (set! debug:print-error pdebugerr))
(define *default-log-port* (current-error-port))
(define (portlogger:set-default-log-port! port)
  (set! *default-log-port* port))

(define (portlogger:open-db fname)
  (let* ((avail    #t) ;; for now - assume wait on journal not needed (tasks:wait-on-journal fname 5 remove: #t)) ;; wait up to about 10 seconds for the journal to go away
	 (exists   (file-exists? fname))
	 (db       (if avail 
		       (sqlite3:open-database fname)
		       (begin
			 (system (conc "rm -f " fname))
			 (sqlite3:open-database fname))))
	 (handler  (sqlite3:make-busy-timeout 136000))
	 (canwrite (file-write-access? fname)))
    (sqlite3:set-busy-handler! db handler)
    (sqlite3:execute db "PRAGMA synchronous = 0;")
        (sqlite3:execute 
    (sqlite3:execute 
     db
     "CREATE TABLE IF NOT EXISTS ports (
            port INTEGER PRIMARY KEY,
            state TEXT DEFAULT 'not-used',
            fail_count INTEGER DEFAULT 0,
            update_time TIMESTAMP DEFAULT (strftime('%s','now')) );")
    db))
191
192
193
194
195
196
197
198

199
200
201
202
203
204
205
194
195
196
197
198
199
200

201
202
203
204
205
206
207
208







-
+







;;
(define (portlogger:is-port-in-use port-num)
  (let-values (((inp oup pid)
                (process "netstat" (list  "-tulpn" ))))
    (let loop ((inl (read-line inp)))
      (if (not (eof-object? inl))
	  (begin 
	    (if (string-search (regexp (conc ":" port-num)) inl)
	    (if (string-search (regexp (conc ":" port-num "\\s+")) inl)
		#t
		(loop (read-line inp))))))))

;;======================================================================
;; MAIN
;;======================================================================

222
223
224
225
226
227
228
229


230
231
232
233
234
225
226
227
228
229
230
231

232
233
234
235
236
237
238







-
+
+





	     ((find)(portlogger:find-port db))
	     ((set) (let ((port  (cadr  args))
			  (state (caddr args)))
		      (portlogger:set-port db 
					   (if (number? port) port (string->number port))
					   state)
		      state))
	     ((failed)(portlogger:set-failed db (string->number (cadr args))) 'failed)))))
	     ((failed)(portlogger:set-failed db (string->number (cadr args))) 'failed)
	     (else "nosuchcommand")))))
    (sqlite3:finalize! db)
    result))
     
;; (print (apply portlogger:main (cdr (argv))))
)