blob: 4936cd0bea0a5fef3788639c15b28febf6803506 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
(require 'cxml)
(require 'usocket)
(require 'cl-xmlspam)
;;
(klacks:with-open-source (s (cxml:make-source #p"s2.xml"))
(loop
for key = (klacks:peek s)
while key
do
(case key
(:start-element
(format t "~A {" (klacks:current-qname s)))
(:end-element
(format t "}")))
(klacks:consume s)))
;;
(klacks:with-open-source (s (cxml:make-source
(usocket:socket-stream (usocket:socket-connect
"victoria.tug.nordu.net"
50001
:element-type '(unsigned-byte 8)))
:buffering nil))
(loop
for key = (klacks:peek-next s)
while key
do
(case key
(:start-document (format t " "))
(:start-element (format t "~A {" (klacks:current-qname s)))
(:end-element (format t "}"))
(:end-document (format t "~%")))
(klacks:consume s)))
;;
(use-package 'xspam)
(defparameter *ns* '((urn . "urn:ietf:params:xml:ns:xfb-0.1")))
(defun get-entry-xspam (sock)
(with-xspam-source (make-xspam-source sock :buffering nil)
(optional
(element :bgp_message ;;|bgp_message|
(text (format t "~A~%" _))))))
;;
(defun klacks-it (arr)
(let ((s (cxml:make-source arr)))
(loop
for key = (klacks:peek s)
while key
do
(case key
;(:start-document (format t "*** start *** "))
;(:end-document (format t "*** end ***~%"))
(:start-element (format t "~A {" (klacks:current-qname s)))
(:end-element (format t "}~%"))
(:characters (format t (klacks:current-characters s))))
(klacks:consume s))))
(defun klacks-it2 (arr)
(let ((s (cxml:make-source arr)))
(do ((key (klacks:peek s) (klacks:peek s)))
((null key))
(case key
;(:start-document (format t "*** start *** "))
;(:end-document (format t "*** end ***~%"))
(:start-element (format t "~A {" (klacks:current-qname s)))
(:end-element (format t "}~%"))
(:characters (format t (klacks:current-characters s))))
(klacks:consume s))))
;;
(let ((sock (usocket:socket-connect
"victoria.tug.nordu.net"
50001
:element-type '(unsigned-byte 8))))
(loop for i from 1 to 5
do
(format t "~A: " i)
(f (usocket:socket-stream sock))
(format t "~%"))
(format t "Closing socket.~%")
(usocket:socket-close sock))
;;;;
(defun read-stream-into-list (host port)
(let ((reader (new-reader host port))
(xmls-builder (cxml-xmls:make-xmls-builder)))
(do ((e (next-xml-blurb reader "BGP_MESSAGE")
(next-xml-blurb reader "BGP_MESSAGE")))
((null e))
(print (cxml:parse e xmls-builder)))
(close-reader)))
;;
(let ((s nil))
(defun file-reader (fn)
(when s
(close s))
(setf s (open fn :element-type '(unsigned-byte 8)))
(lambda (n)
(read-byte s nil)))
(defun close-file ()
(close s)))
;;
(defun read-file-into-list (fn)
(let ((reader (file-reader fn))
(xmls-builder (cxml-xmls:make-xmls-builder)))
(do ((e (next-xml-blurb reader "BGP_MESSAGE")
(next-xml-blurb reader "BGP_MESSAGE")))
((null e))
(print (cxml:parse e xmls-builder)))
(close-file)))
;;
(next-xml-blurb (new-reader "victoria.tug.nordu.net" 50001) "BGP_MESSAGE")
;;;; Pattern matching using fare-matcher.
(require :fare-matcher)
(let ((expr '(foo bar)))
(letm
(list a b) ;pattern
expr
(list a b)))
(let ((expr '(foo kaka bar)))
(match
expr
((list a b) (list 'plain a b))
((list a 'kaka b) (list 'cookie a b))))
;;;; db
;; SQL
"select * from bgp_message where timestamp != 0 order by id desc limit 3;"
;; postmodern, lower level
;; http://common-lisp.net/project/postmodern/postmodern.html#querying
(query "select count(*) from bgp_message" :single)
(doquery (:select 'timestamp 'prefix 'label :from 'bgp-message)
(ts pref lbl)
(format t "~A ~A ~A~%" ts pref lbl))
;; postmodern, higher level
;; http://common-lisp.net/project/postmodern/postmodern.html#tabledef
(dolist (m (select-dao 'bgp-message (:= 'label "NANN")))
(format t "~A ~A ~A~%" (timestamp m) (prefix m) (label m)))
(length (select-dao 'bgp-message))
|