Compare commits

...

13 Commits

Author SHA1 Message Date
fa674a5981 chore: Fully Flesh out BRETTB IPv4 2024-11-28 17:21:06 -06:00
4db5d329a5 Flesh out BRETTB ROA 2024-11-28 16:48:33 -06:00
967bc3e4b7 chore: Assign v6 space to BRETTB 2024-11-28 13:39:11 -06:00
7e25e2cc3f chore: add route filtering doc 2024-11-28 13:32:34 -06:00
8b0efcc4d2 chore: Update DNS Zones 2024-11-28 13:28:40 -06:00
8452b71c02 Register BrettB 2024-11-28 12:26:37 -06:00
5272330fa2 feat: Policy checker 2024-11-28 12:08:11 -06:00
cb7862dac8 chore: Remove NX3-ORG from V6 range 2024-11-28 12:03:24 -06:00
888274bcdb chore: Format repo 2024-11-28 12:01:47 -06:00
ed6719a224 chore: .gitignore file 2024-11-28 12:01:35 -06:00
9af1dd6579 feat: More schema checking 2024-11-28 11:59:53 -06:00
2f8cec54c1 feat: Schema checker script 2024-11-28 11:51:12 -06:00
b0b315dcd9 chore: add NX3 as a registry 2024-11-28 11:44:18 -06:00
68 changed files with 3100 additions and 63 deletions

21
.gitignore vendored Normal file
View File

@@ -0,0 +1,21 @@
_MTN
lib/
whoisd/
__pycache__
/data/.rpsl
# ---> Emacs
# -*- mode: gitignore; -*-
*~
\#*\#
.\#*
# ---> macOS
# General
.DS_Store
.AppleDouble
.LSOverride
# Thumbnails
._*

18
check-my-stuff Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/sh
if [ "$#" -eq "0" ]
then
echo "Usage: $0 YOUR-MNT"
exit
fi
BASE="$(readlink -f "$0" 2>/dev/null || python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "$0")"
BASE="$(dirname "$BASE")"
cd "$BASE" || exit 1
if [ "$1" = "--all" ]; then
utils/schema-check/nx3_schema.py -v scan data/ || ( echo "Schema validation failed, please check above!" ; exit 1 )
else
utils/schema-check/nx3_schema.py -v scan data/ -f "data/mntner/$1" || ( echo "Schema validation for mntner object failed, please check above!" ; exit 1 )
utils/schema-check/nx3_schema.py -v scan data/ -m "$1" || ( echo "Schema validation for related objects failed, please check above!" ; exit 1 )
fi

18
check-pol Executable file
View File

@@ -0,0 +1,18 @@
#!/usr/bin/env bash
set -o pipefail
if [ $# -eq 0 ]
then
echo "Usage: $0 COMMIT YOUR-MNT"
exit
fi
BASE="$(readlink -f "$0" 2>/dev/null || python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "$0")"
BASE="$(dirname "$BASE")"
cd "$BASE" || exit 1
git diff --name-only "$1" | while IFS='/' read -ra LINE; do
if [[ "${LINE[0]}" = "data" && -n "${LINE[2]}" ]]; then
utils/schema-check/nx3_schema.py -v policy "${LINE[1]}" "${LINE[2]}" "$2"
fi
done

View File

@@ -4,4 +4,4 @@ remarks: This block is reserved to delegate access for sub-allocation
remarks: You can not freely register any ASN in this block.
mnt-by: NX3-MNT
policy: closed
source: NX3
source: NX3

View File

@@ -4,4 +4,4 @@ remarks: This block is reserved for end-user allocation.
remarks: You can freely register any ASN in this block.
mnt-by: NX3-MNT
policy: open
source: NX3
source: NX3

View File

@@ -0,0 +1,6 @@
aut-num: AS4266030001
as-name: AS1-BRETTB-NX3
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,6 @@
aut-num: AS4266030002
as-name: AS2-BRETTB-NX3
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,6 @@
aut-num: AS4266030003
as-name: AS3-BRETTB-NX3
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,6 @@
aut-num: AS4266030004
as-name: AS4-BRETTB-NX3
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,4 @@
domain: delegation-servers.nx3
nserver: a.delegation-servers.nx3 172.24.31.2
mnt-by: NX3-MNT
source: NX3

6
data/dns/info.nx3 Normal file
View File

@@ -0,0 +1,6 @@
domain: info.nx3
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: NX3-MNT
nserver: ns1.info.nx3 172.24.33.10
source: NX3

4
data/dns/nx3 Normal file
View File

@@ -0,0 +1,4 @@
domain: nx3
nserver: a.delegation-servers.nx3
mnt-by: NX3-MNT
source: NX3

View File

@@ -0,0 +1,4 @@
domain: recursive-servers.nx3
nserver: a.delegation-servers.nx3
mnt-by: NX3-MNT
source: NX3

24
data/filter.txt Normal file
View File

@@ -0,0 +1,24 @@
# For FRR Rules:
# cat filter.txt | \
# grep -e ^[0-9] | \
# awk '{ print "ip prefix-list nx3-in seq " $1 " " $2 " " $3 " ge " $4 " le " $5}' | \
# sed "s_/\([0-9]\+\) ge \1_/\1_g;s_/\([0-9]\+\) le \1_/\1_g"
#
# For BIRD Rules:
# cat filter.txt | \
# awk 'BEGIN {printf "function is_valid_network() {\n return net ~ [\n" } \
# /^[0-9]/ && $2 ~ /permit/ {printf " %s{%s,%s},\n", $3, $4, $5};' | \
# sed "$ s/,$/\n ];\n}/"
# The rules MUST be sorted by the number column first and then the first matching rule MUST be used.
# ROAs MUST be checked against these rules and max-length of the ROA NUST NOT be longer than allowed by the matching rule.
#Nr Action Prefix MinLen MaxLen # Comment
1001 permit 172.24.0.0/24 28 32 # dn42 anycast range
1002 permit 172.25.0.0/24 28 32 # dn42 anycast range
1003 permit 172.26.0.0/24 28 32 # dn42 anycast range
1004 permit 172.27.0.0/24 28 32 # dn42 anycast range
1100 permit 172.24.0.0/14 21 29 # dn42 main net
9999 deny 0.0.0.0/0 0 32 # block the rest

20
data/filter6.txt Normal file
View File

@@ -0,0 +1,20 @@
# To FRR Rules:
# cat filter6.txt | \
# grep -e ^[0-9] | \
# awk '{ print "ipv prefix-list nx3v6-in seq " $1 " " $2 " " $3 " ge " $4 " le " $5}' | \
# sed "s_/\([0-9]\+\) ge \1_/\1_g;s_/\([0-9]\+\) le \1_/\1_g"
#
# For BIRD Rules:
# cat filter6.txt | \
# awk 'BEGIN {printf "function is_valid_network() {\n return net ~ [\n" } \
# /^[0-9]/ && $2 ~ /permit/ {printf " %s{%s,%s},\n", $3, $4, $5};' | \
# sed "$ s/,$/\n ];\n}/"
# The rules MUST be sorted by the number column first and then the first matching rule MUST be used.
# ROAs MUST be checked against these rules and max-length of the ROA NUST NOT be longer than allowed by the matching rule.
# Nr Action Prefix MinLen MaxLen # Comment
1001 permit fd00::/8 44 64 # ULA (defined)
9999 deny ::/0 0 128 # block the rest

View File

@@ -1,13 +1,13 @@
inet6num: 0000:0000:0000:0000:0000:0000:0000:0000 - ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
netname: IANA-RESERVED
descr: IANA Reserved Space
remarks: This space is reserved by RFC4291.
remarks:
remarks: Because portions are not routable inside nx3
remarks: reservations are not allowed at this level.
remarks:
remarks: Open policy can be found inside fd00::/8
mnt-by: NX3-MNT
policy: reserved
cidr: ::/0
source: NX3
inet6num: 0000:0000:0000:0000:0000:0000:0000:0000 - ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
netname: IANA-RESERVED
descr: IANA Reserved Space
remarks: This space is reserved by RFC4291.
remarks:
remarks: Because portions are not routable inside nx3
remarks: reservations are not allowed at this level.
remarks:
remarks: Open policy can be found inside fd00::/8
mnt-by: NX3-MNT
policy: reserved
cidr: ::/0
source: NX3

View File

@@ -1,10 +1,9 @@
inet6num: fd00:0000:0000:0000:0000:0000:0000:0000 - fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
cidr: fd00::/8
netname: ROOT-NX3-ULA
descr: NX3 ULA Address Space
remarks: Only /48 prefixes may be allocated out of this range.
status: ALLOCATED
policy: open
org: ORG-NX3
mnt-by: NX3-MNT
source: NX3
inet6num: fd00:0000:0000:0000:0000:0000:0000:0000 - fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
cidr: fd00::/8
netname: ROOT-NX3-ULA
descr: NX3 ULA Address Space
remarks: Only /48 prefixes may be allocated out of this range.
status: ALLOCATED
policy: open
mnt-by: NX3-MNT
source: NX3

View File

@@ -0,0 +1,8 @@
inet6num: fd06:108f:6f8e:0000:0000:0000:0000:0000 - fd06:108f:6f8e:ffff:ffff:ffff:ffff:ffff
cidr: fd06:108f:6f8e::/48
netname: NET3-BRETTB-NX3
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: BRETTB-MNT
status: ASSIGNED
source: NX3

View File

@@ -0,0 +1,8 @@
inet6num: fd48:c420:f618:0000:0000:0000:0000:0000 - fd48:c420:f618:ffff:ffff:ffff:ffff:ffff
cidr: fd48:c420:f618::/48
netname: NET1-BRETTB-NX3
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: BRETTB-MNT
status: ASSIGNED
source: NX3

View File

@@ -0,0 +1,8 @@
inet6num: fdd8:4045:c53c:0000:0000:0000:0000:0000 - fdd8:4045:c53c:ffff:ffff:ffff:ffff:ffff
cidr: fdd8:4045:c53c::/48
netname: NET2-BRETTB-NX3
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: BRETTB-MNT
status: ASSIGNED
source: NX3

View File

@@ -5,4 +5,4 @@ policy: reserved
descr: * The entire IPv4 address space
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -4,4 +4,4 @@ netname: NET-BLK414-NX3
policy: reserved
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: Not free for direct assignment, see sub-allocated blocks
policy: reserved
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: * Defined this way for future policies
policy: open
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: * Reserved for anycast services, typically a /32 for each se
policy: ask
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -0,0 +1,7 @@
inetnum: 172.24.31.0 - 172.24.31.255
cidr: 172.24.31.0/24
netname: NET1-BRETTB-NX3
descr: Brett B Network 1
mnt-by: BRETTB-MNT
status: ASSIGNED
source: NX3

View File

@@ -0,0 +1,7 @@
inetnum: 172.24.32.0 - 172.24.32.255
cidr: 172.24.32.0/24
netname: NET2-BRETTB-NX3
descr: Brett B Network 2
mnt-by: BRETTB-MNT
status: ASSIGNED
source: NX3

View File

@@ -0,0 +1,7 @@
inetnum: 172.24.33.0 - 172.24.33.255
cidr: 172.24.33.0/24
netname: NET3-BRETTB-NX3
descr: Brett B Network 3
mnt-by: BRETTB-MNT
status: ASSIGNED
source: NX3

View File

@@ -0,0 +1,7 @@
inetnum: 172.24.34.0 - 172.24.34.255
cidr: 172.24.34.0/24
netname: NET4-BRETTB-NX3
descr: Brett B Network 4
mnt-by: BRETTB-MNT
status: ASSIGNED
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: * Defined this way for future policies
policy: open
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: Not free for direct assignment, see sub-allocated blocks
policy: reserved
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: * Reserved for anycast services, typically a /32 for each se
policy: ask
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: Not free for direct assignment, see sub-allocated blocks
policy: reserved
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: * Reserved for anycast services, typically a /32 for each se
policy: ask
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: Not free for direct assignment, see sub-allocated blocks
policy: reserved
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

View File

@@ -6,4 +6,4 @@ remarks: * Reserved for anycast services, typically a /32 for each se
policy: ask
mnt-by: NX3-MNT
status: ALLOCATED
source: NX3
source: NX3

5
data/mntner/BRETTB-MNT Normal file
View File

@@ -0,0 +1,5 @@
mntner: BRETTB-MNT
admin-c: BRETTB-NX3
tech-c: BRETTB-NX3
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -1,4 +1,4 @@
mntner: NX3-MNT
descr: mntner for owning objects in the name of whole nx3.
mnt-by: NX3-MNT
source: NX3
source: NX3

5
data/person/BRETTB-NX3 Normal file
View File

@@ -0,0 +1,5 @@
person: Brett Bender
e-mail: brett@brettb.xyz
nic-hdl: BRETTB-NX3
mnt-by: BRETTB-MNT
source: NX3

4
data/registry/NX3 Normal file
View File

@@ -0,0 +1,4 @@
registry: NX3
url: https://git.brettb.xyz/nx3/registry
mnt-by: NX3-MNT
source: NX3

View File

@@ -0,0 +1,5 @@
route: 172.24.0.53/32
origin: AS4266030002
max-length: 32
mnt-by: NX3-MNT
source: NX3

View File

@@ -0,0 +1,5 @@
route: 172.24.31.0/24
origin: AS4266030001
max-length: 24
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,5 @@
route: 172.24.32.0/24
origin: AS4266030002
max-length: 24
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,5 @@
route: 172.24.33.0/24
origin: AS4266030003
max-length: 24
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,5 @@
route: 172.24.34.0/24
origin: AS4266030004
max-length: 24
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,5 @@
route6: fd06:108f:6f8e::/48
origin: AS4266030003
max-length: 48
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,5 @@
route6: fd48:c420:f618::/48
origin: AS4266030001
max-length: 48
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -0,0 +1,5 @@
route6: fdd8:4045:c53c::/48
origin: AS4266030002
max-length: 48
mnt-by: BRETTB-MNT
source: NX3

View File

@@ -10,4 +10,4 @@ key: tech-c optional multiple lookup=nx3.person,nx3.role
key: remarks optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -11,4 +11,4 @@ key: tech-c optional multiple lookup=nx3.person,nx3.role
key: remarks optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -21,4 +21,4 @@ key: geo-loc optional multiple > [lat-c] [long-c] [name]
key: remarks optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -13,4 +13,4 @@ key: ds-rdata optional multiple
key: remarks optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -21,4 +21,4 @@ key: remarks optional multiple
key: source required single lookup=nx3.registry
network-owner: inet6num
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -22,4 +22,4 @@ key: source required single lookup=nx3.registry
network-owner: inet6num
network-owner: inetnum
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -13,4 +13,4 @@ key: tech-c optional multiple lookup=nx3.person,nx3.role
key: mnt-by required multiple lookup=nx3.mntner
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -12,4 +12,4 @@ key: abuse-mailbox optional single
key: remarks optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -20,4 +20,4 @@ key: remarks optional multiple
key: address optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -17,4 +17,4 @@ key: address optional multiple
key: remarks optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -9,4 +9,4 @@ key: admin-c optional multiple lookup=nx3.person,nx3.role
key: tech-c optional multiple lookup=nx3.person,nx3.role
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -13,4 +13,4 @@ key: descr optional single
key: remarks optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -14,4 +14,4 @@ key: pingable optional multiple
key: max-length optional single
network-owner: inetnum
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -12,4 +12,4 @@ key: tech-c optional multiple lookup=nx3.person,nx3.role
key: remarks optional multiple
key: source required single lookup=nx3.registry
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -14,4 +14,4 @@ key: pingable optional multiple
key: max-length optional single
network-owner: inet6num
mnt-by: NX3-MNT
source: NX3
source: NX3

View File

@@ -23,39 +23,30 @@ mnt-by: NX3-MNT
source: NX3
remarks: # option descriptions
Attribute names must match /[a-zA-Z]([a-zA-Z0-9_\-]*[a-zA-Z0-9])?/.
+
required
: object required to have at least one
optional
: object not required to have at least one
+
single
: only one of this type allowed
multiple
: more than one of this type allowed
+
primary
: use field as lookup key for lookup
* only one allowed per schema
* does not allow newlines
+
schema
: use field name as the name of the schema
* only one allowed per schema
* does not allow newlines
+
lookup
: schema match to use for related record
+
\> option specs
: defines the option specifications for the key.
* must come last in option list
+
[label] string value. A positional string argument required.
Text inside brackets represent a label for the string and must match the same rules as attribute names.
If follwed by '...' values are gathered as an array.
+
{enum1|enum2|} enumeration. One option in pipe('|') deliniation is allowed.
If there is a trailing pipe it means the enum is optional. Enum values must match the same rules as attribute names.
+
'literal' Literal value. literal text value which must not contain any whitespace or single quotes.
'literal' Literal value. literal text value which must not contain any whitespace or single quotes.

14
fmt-my-stuff Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/sh
if [ "$#" -eq "0" ]
then
echo "Usage: $0 YOUR-MNT"
exit
fi
BASE="$(readlink -f "$0" 2>/dev/null || python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' "$0")"
BASE="$(dirname "$BASE")"
grep -lrE "(\s|:)$1(\s|\$)" "$BASE/data/" | while read -r line; do
utils/schema-check/nx3_schema.py fmt -i "$line"
done

177
utils/schema-check/log.py Executable file
View File

@@ -0,0 +1,177 @@
from __future__ import print_function
import os
import sys
import inspect
import datetime
OUTPUT = sys.stderr
LEVEL = ["CRIT", "ERR ", "WARN", "NOTE", "INFO", "DBUG", "...."]
CLEVEL = ["\x1B[41mCRIT\x1B[0m",
"\x1B[31mERR \x1B[0m",
"\x1B[33mWARN\x1B[0m",
"\x1B[32mNOTE\x1B[0m",
"\x1B[34mINFO\x1B[0m",
"\x1B[90mDBUG\x1B[0m",
"\x1B[90m....\x1B[0m"]
MSG = "{0} {1} {2} {3} {4} {5} :: {6}"
CMSG = "[{1}]\x1B[90m {2} {3}:{5} [{4}]\x1B[0m {6}\x1B[0m"
CMULTI = "[{1}]\x1B[90m {2}\x1B[0m"
VERB_CRITICAL = 0
VERB_ERROR = 1
VERB_WARN = 2
VERB_NOTICE = 3
VERB_INFO = 4
VERB_DEBUG = 5
VERB_NONE = -1
class Log:
log_dir = ""
log_pfx = "main"
level_console = VERB_ERROR
level_file = VERB_NONE
level_full = False
count = [0, 0, 0, 0, 0, 0]
def __init__(self):
self.prog_name = sys.argv[0].rsplit("/", 1)[-1]
self.prog_name = self.prog_name.split(".", 1)[0]
self.log_pfx = self.prog_name
def __del__(self):
if self.level_console >= 5:
os.write(1, b"[\x1B[90m\x1B[90mDBUG\x1B[90m] Log Counters crit:%d err:%d warn:%d note:%d info:%d dbug:%d\x1B[0m\n" % tuple(self.count))
def set_dir(self, name):
if not os.path.isdir(name):
os.makedirs(name)
self.log_dir = name
# Write a message to console or log, conditionally.
def output(self, level, message, frame=1):
if level < 0 or level > 5:
level = 5
self.count[level] += 1
# function_name = inspect.stack()[1][3]
cur_date = datetime.datetime.now()
(frame, file, ln, fn, lines, index) = inspect.getouterframes(
inspect.currentframe())[frame]
message = str(message).split("\n")
cmsg = CMSG if self.level_full else CMULTI
if self.level_console >= level:
if len(message) == 1:
if self.level_full:
arg = str(cur_date), CLEVEL[
level], self.prog_name, file, fn, ln, message[0]
else:
arg = str(cur_date), CLEVEL[level], message[0]
print(cmsg.format(*arg), file=OUTPUT)
else:
if self.level_full:
arg = str(cur_date), CLEVEL[
level], self.prog_name, file, fn, ln, ""
print(cmsg.format(*arg), file=OUTPUT)
for line in message:
print(CMULTI.format(str(cur_date), CLEVEL[
VERB_NONE], line), file=OUTPUT)
if self.level_file >= level:
self.set_dir("./logs")
log_file_name = os.path.join(
self.log_dir, self.log_pfx + str(cur_date.strftime('%Y-%m-%d')) + ".txt")
with open(log_file_name, "a") as logger:
logger.write(MSG.format(str(cur_date), LEVEL[
level], self.prog_name, file, fn, ln, message[0]) + "\n")
for line in message[1:]:
logger.write(MSG.format(str(cur_date), LEVEL[
VERB_NONE], self.prog_name, file, fn, ln, line) + "\n")
def fatal(self, message):
self.output(VERB_CRITICAL, message, 2)
sys.exit(1)
def critical(self, message):
self.output(VERB_CRITICAL, message, 2)
def error(self, message):
self.output(VERB_ERROR, message, 2)
def warning(self, message):
self.output(VERB_WARN, message, 2)
def notice(self, message):
self.output(VERB_NOTICE, message, 2)
def info(self, message):
self.output(VERB_INFO, message, 2)
def debug(self, message):
self.output(VERB_DEBUG, message, 2)
def fmt_exception(exc_type, exc_value, exc_traceback):
import traceback
lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
log_string = ''.join(line for line in lines)
email_string = ''.join('<br />' + line for line in lines)
return log_string, email_string
default = Log()
fatal = default.fatal
critical = default.critical
error = default.error
warning = default.warning
notice = default.notice
info = default.info
debug = default.debug
class LogException:
stop = None
def __init__(self, stop=True):
self.stop = stop
def __enter__(self, stop=True):
pass
def __exit__(self, exc_type, value, traceback):
if exc_type is None:
return True
if exc_type is SystemExit and value.args == (0,):
return True
log_string, email_string = fmt_exception(exc_type, value, traceback)
default.output(VERB_CRITICAL, 'Failure\n\n' + log_string, 2)
if self.stop is False:
return False
from . import email
email.send(default.prog_name + ' FAILURE', email_string)
fatal("ABORTING EXECUTION")
exception = LogException

1145
utils/schema-check/nx3_schema.py Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff