location-importer.in: Attempt to provide meaningful AS names if organisation handles are missing
Message ID | 20210719213440.4465-1-peter.mueller@ipfire.org |
---|---|
State | Accepted |
Commit | 426e0bee1cb64470ce7da1bac417f018bd56b939 |
Headers |
Return-Path: <location-bounces@lists.ipfire.org> Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail01.haj.ipfire.org", Issuer "R3" (verified OK)) by web04.haj.ipfire.org (Postfix) with ESMTPS id 4GTFVY0Tx4z3xGl for <patchwork@web04.haj.ipfire.org>; Mon, 19 Jul 2021 21:34:45 +0000 (UTC) Received: from mail02.haj.ipfire.org (mail02.haj.ipfire.org [172.28.1.201]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail02.haj.ipfire.org", Issuer "R3" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 4GTFVX4bvxz6FZ; Mon, 19 Jul 2021 21:34:44 +0000 (UTC) Received: from mail02.haj.ipfire.org (localhost [127.0.0.1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4GTFVX3rzkz2xKp; Mon, 19 Jul 2021 21:34:44 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail01.haj.ipfire.org", Issuer "R3" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4GTFVW18Cdz2x9X for <location@lists.ipfire.org>; Mon, 19 Jul 2021 21:34:43 +0000 (UTC) Received: from location02.haj.ipfire.org (location02.haj.ipfire.org [172.28.1.170]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "location02.haj.ipfire.org", Issuer "R3" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 4GTFVV2qpXz6FZ; Mon, 19 Jul 2021 21:34:42 +0000 (UTC) Received: by location02.haj.ipfire.org (Postfix, from userid 0) id 4GTFVV1Jf6z13RQ; Mon, 19 Jul 2021 21:34:42 +0000 (UTC) From: =?utf-8?q?Peter_M=C3=BCller?= <peter.mueller@ipfire.org> To: location@lists.ipfire.org Subject: [PATCH] location-importer.in: Attempt to provide meaningful AS names if organisation handles are missing Date: Mon, 19 Jul 2021 21:34:40 +0000 Message-Id: <20210719213440.4465-1-peter.mueller@ipfire.org> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: location@lists.ipfire.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: <location.lists.ipfire.org> List-Unsubscribe: <https://lists.ipfire.org/mailman/options/location>, <mailto:location-request@lists.ipfire.org?subject=unsubscribe> List-Archive: <http://lists.ipfire.org/pipermail/location/> List-Post: <mailto:location@lists.ipfire.org> List-Help: <mailto:location-request@lists.ipfire.org?subject=help> List-Subscribe: <https://lists.ipfire.org/mailman/listinfo/location>, <mailto:location-request@lists.ipfire.org?subject=subscribe> Errors-To: location-bounces@lists.ipfire.org Sender: "Location" <location-bounces@lists.ipfire.org> |
Series |
location-importer.in: Attempt to provide meaningful AS names if organisation handles are missing
|
|
Commit Message
Peter Müller
July 19, 2021, 9:34 p.m. UTC
A decent amount of autnum objects - especially, but not exclusively in
the APNIC sector - does not contain a link to an organisation handle.
In such cases, this patch is going to use the first description line of
the atunum object in question (if available) as a string for its name.
The overwhelming majority of affected ASNs contains a valuable
information there, so this is almost as good as having an organisation
handle linked to it.
Fixes: #12660
Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
---
src/python/location-importer.in | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
Comments
Thank you. Merged. Do we plan a release because of this soon? > On 19 Jul 2021, at 22:34, Peter Müller <peter.mueller@ipfire.org> wrote: > > A decent amount of autnum objects - especially, but not exclusively in > the APNIC sector - does not contain a link to an organisation handle. > > In such cases, this patch is going to use the first description line of > the atunum object in question (if available) as a string for its name. > The overwhelming majority of affected ASNs contains a valuable > information there, so this is almost as good as having an organisation > handle linked to it. > > Fixes: #12660 > > Signed-off-by: Peter Müller <peter.mueller@ipfire.org> > --- > src/python/location-importer.in | 28 +++++++++++++++++++++++++--- > 1 file changed, 25 insertions(+), 3 deletions(-) > > diff --git a/src/python/location-importer.in b/src/python/location-importer.in > index d4b0ca2..bec0b62 100644 > --- a/src/python/location-importer.in > +++ b/src/python/location-importer.in > @@ -393,11 +393,11 @@ class CLI(object): > with self.db.transaction(): > # Create some temporary tables to store parsed data > self.db.execute(""" > - CREATE TEMPORARY TABLE _autnums(number integer, organization text, source text NOT NULL) > + CREATE TEMPORARY TABLE _autnums(number integer NOT NULL, organization text NOT NULL, source text NOT NULL) > ON COMMIT DROP; > CREATE UNIQUE INDEX _autnums_number ON _autnums(number); > > - CREATE TEMPORARY TABLE _organizations(handle text, name text NOT NULL, source text NOT NULL) > + CREATE TEMPORARY TABLE _organizations(handle text NOT NULL, name text NOT NULL, source text NOT NULL) > ON COMMIT DROP; > CREATE UNIQUE INDEX _organizations_handle ON _organizations(handle); > > @@ -604,10 +604,32 @@ class CLI(object): > elif key == "org": > autnum[key] = val.upper() > > + elif key == "descr": > + # Save the first description line as well... > + if not key in autnum: > + autnum[key] = val > + > # Skip empty objects > - if not autnum: > + if not autnum or not "asn" in autnum: > return > > + # Insert a dummy organisation handle into our temporary organisations > + # table in case the AS does not have an organisation handle set, but > + # has a description (a quirk often observed in APNIC area), so we can > + # later display at least some string for this AS. > + if not "org" in autnum: > + if "descr" in autnum: > + autnum["org"] = "LIBLOC-%s-ORGHANDLE" % autnum.get("asn") > + > + self.db.execute("INSERT INTO _organizations(handle, name, source) \ > + VALUES(%s, %s, %s) ON CONFLICT (handle) DO NOTHING", > + autnum.get("org"), autnum.get("descr"), source_key, > + ) > + else: > + log.warning("ASN %s neither has an organisation handle nor a description line set, omitting" % \ > + autnum.get("asn")) > + return > + > # Insert into database > self.db.execute("INSERT INTO _autnums(number, organization, source) \ > VALUES(%s, %s, %s) ON CONFLICT (number) DO UPDATE SET \ > -- > 2.20.1 >
Hello Michael, thanks for your reply. I would leave this up to you - some data-related issues are still on my list, but I am unfortunately really short on spare time at the moment. So I guess we should get in production what we have at hand... :-) By the way: Thank you for fixing location01, SSH login works fine for me again. :-) Thanks, and best regards, Peter Müller > Thank you. Merged. > > Do we plan a release because of this soon? > >> On 19 Jul 2021, at 22:34, Peter Müller <peter.mueller@ipfire.org> wrote: >> >> A decent amount of autnum objects - especially, but not exclusively in >> the APNIC sector - does not contain a link to an organisation handle. >> >> In such cases, this patch is going to use the first description line of >> the atunum object in question (if available) as a string for its name. >> The overwhelming majority of affected ASNs contains a valuable >> information there, so this is almost as good as having an organisation >> handle linked to it. >> >> Fixes: #12660 >> >> Signed-off-by: Peter Müller <peter.mueller@ipfire.org> >> --- >> src/python/location-importer.in | 28 +++++++++++++++++++++++++--- >> 1 file changed, 25 insertions(+), 3 deletions(-) >> >> diff --git a/src/python/location-importer.in b/src/python/location-importer.in >> index d4b0ca2..bec0b62 100644 >> --- a/src/python/location-importer.in >> +++ b/src/python/location-importer.in >> @@ -393,11 +393,11 @@ class CLI(object): >> with self.db.transaction(): >> # Create some temporary tables to store parsed data >> self.db.execute(""" >> - CREATE TEMPORARY TABLE _autnums(number integer, organization text, source text NOT NULL) >> + CREATE TEMPORARY TABLE _autnums(number integer NOT NULL, organization text NOT NULL, source text NOT NULL) >> ON COMMIT DROP; >> CREATE UNIQUE INDEX _autnums_number ON _autnums(number); >> >> - CREATE TEMPORARY TABLE _organizations(handle text, name text NOT NULL, source text NOT NULL) >> + CREATE TEMPORARY TABLE _organizations(handle text NOT NULL, name text NOT NULL, source text NOT NULL) >> ON COMMIT DROP; >> CREATE UNIQUE INDEX _organizations_handle ON _organizations(handle); >> >> @@ -604,10 +604,32 @@ class CLI(object): >> elif key == "org": >> autnum[key] = val.upper() >> >> + elif key == "descr": >> + # Save the first description line as well... >> + if not key in autnum: >> + autnum[key] = val >> + >> # Skip empty objects >> - if not autnum: >> + if not autnum or not "asn" in autnum: >> return >> >> + # Insert a dummy organisation handle into our temporary organisations >> + # table in case the AS does not have an organisation handle set, but >> + # has a description (a quirk often observed in APNIC area), so we can >> + # later display at least some string for this AS. >> + if not "org" in autnum: >> + if "descr" in autnum: >> + autnum["org"] = "LIBLOC-%s-ORGHANDLE" % autnum.get("asn") >> + >> + self.db.execute("INSERT INTO _organizations(handle, name, source) \ >> + VALUES(%s, %s, %s) ON CONFLICT (handle) DO NOTHING", >> + autnum.get("org"), autnum.get("descr"), source_key, >> + ) >> + else: >> + log.warning("ASN %s neither has an organisation handle nor a description line set, omitting" % \ >> + autnum.get("asn")) >> + return >> + >> # Insert into database >> self.db.execute("INSERT INTO _autnums(number, organization, source) \ >> VALUES(%s, %s, %s) ON CONFLICT (number) DO UPDATE SET \ >> -- >> 2.20.1 >> >
Hey, > On 21 Jul 2021, at 22:23, Peter Müller <peter.mueller@ipfire.org> wrote: > > Hello Michael, > > thanks for your reply. > > I would leave this up to you - some data-related issues are still on my list, but I > am unfortunately really short on spare time at the moment. So I guess we should get > in production what we have at hand... :-) Since we do not make too much use of this data, yet, I would like to leave another release for a little bit and wait until the rest is coming in. I generally like the release early and often thing. We should keep doing that. > By the way: Thank you for fixing location01, SSH login works fine for me again. :-) -Michael > > Thanks, and best regards, > Peter Müller > > >> Thank you. Merged. >> >> Do we plan a release because of this soon? >> >>> On 19 Jul 2021, at 22:34, Peter Müller <peter.mueller@ipfire.org> wrote: >>> >>> A decent amount of autnum objects - especially, but not exclusively in >>> the APNIC sector - does not contain a link to an organisation handle. >>> >>> In such cases, this patch is going to use the first description line of >>> the atunum object in question (if available) as a string for its name. >>> The overwhelming majority of affected ASNs contains a valuable >>> information there, so this is almost as good as having an organisation >>> handle linked to it. >>> >>> Fixes: #12660 >>> >>> Signed-off-by: Peter Müller <peter.mueller@ipfire.org> >>> --- >>> src/python/location-importer.in | 28 +++++++++++++++++++++++++--- >>> 1 file changed, 25 insertions(+), 3 deletions(-) >>> >>> diff --git a/src/python/location-importer.in b/src/python/location-importer.in >>> index d4b0ca2..bec0b62 100644 >>> --- a/src/python/location-importer.in >>> +++ b/src/python/location-importer.in >>> @@ -393,11 +393,11 @@ class CLI(object): >>> with self.db.transaction(): >>> # Create some temporary tables to store parsed data >>> self.db.execute(""" >>> - CREATE TEMPORARY TABLE _autnums(number integer, organization text, source text NOT NULL) >>> + CREATE TEMPORARY TABLE _autnums(number integer NOT NULL, organization text NOT NULL, source text NOT NULL) >>> ON COMMIT DROP; >>> CREATE UNIQUE INDEX _autnums_number ON _autnums(number); >>> >>> - CREATE TEMPORARY TABLE _organizations(handle text, name text NOT NULL, source text NOT NULL) >>> + CREATE TEMPORARY TABLE _organizations(handle text NOT NULL, name text NOT NULL, source text NOT NULL) >>> ON COMMIT DROP; >>> CREATE UNIQUE INDEX _organizations_handle ON _organizations(handle); >>> >>> @@ -604,10 +604,32 @@ class CLI(object): >>> elif key == "org": >>> autnum[key] = val.upper() >>> >>> + elif key == "descr": >>> + # Save the first description line as well... >>> + if not key in autnum: >>> + autnum[key] = val >>> + >>> # Skip empty objects >>> - if not autnum: >>> + if not autnum or not "asn" in autnum: >>> return >>> >>> + # Insert a dummy organisation handle into our temporary organisations >>> + # table in case the AS does not have an organisation handle set, but >>> + # has a description (a quirk often observed in APNIC area), so we can >>> + # later display at least some string for this AS. >>> + if not "org" in autnum: >>> + if "descr" in autnum: >>> + autnum["org"] = "LIBLOC-%s-ORGHANDLE" % autnum.get("asn") >>> + >>> + self.db.execute("INSERT INTO _organizations(handle, name, source) \ >>> + VALUES(%s, %s, %s) ON CONFLICT (handle) DO NOTHING", >>> + autnum.get("org"), autnum.get("descr"), source_key, >>> + ) >>> + else: >>> + log.warning("ASN %s neither has an organisation handle nor a description line set, omitting" % \ >>> + autnum.get("asn")) >>> + return >>> + >>> # Insert into database >>> self.db.execute("INSERT INTO _autnums(number, organization, source) \ >>> VALUES(%s, %s, %s) ON CONFLICT (number) DO UPDATE SET \ >>> -- >>> 2.20.1 >>> >>
Hi Michael, > Hey, > >> On 21 Jul 2021, at 22:23, Peter Müller <peter.mueller@ipfire.org> wrote: >> >> Hello Michael, >> >> thanks for your reply. >> >> I would leave this up to you - some data-related issues are still on my list, but I >> am unfortunately really short on spare time at the moment. So I guess we should get >> in production what we have at hand... :-) > > Since we do not make too much use of this data, yet, I would like to leave another release for a little bit and wait until the rest is coming in. thought about this again, I think we could apply this patch to libloc running on location01, as we probably won't release a next version of libloc within the next few weeks - primarily due to me lacking spare time. :-/ Albeit it is hacky, I think it would be worth it. What do you think? > I generally like the release early and often thing. We should keep doing that. ACK. Thanks, and best regards, Peter Müller > >> By the way: Thank you for fixing location01, SSH login works fine for me again. :-) > > -Michael > >> >> Thanks, and best regards, >> Peter Müller >> >> >>> Thank you. Merged. >>> >>> Do we plan a release because of this soon? >>> >>>> On 19 Jul 2021, at 22:34, Peter Müller <peter.mueller@ipfire.org> wrote: >>>> >>>> A decent amount of autnum objects - especially, but not exclusively in >>>> the APNIC sector - does not contain a link to an organisation handle. >>>> >>>> In such cases, this patch is going to use the first description line of >>>> the atunum object in question (if available) as a string for its name. >>>> The overwhelming majority of affected ASNs contains a valuable >>>> information there, so this is almost as good as having an organisation >>>> handle linked to it. >>>> >>>> Fixes: #12660 >>>> >>>> Signed-off-by: Peter Müller <peter.mueller@ipfire.org> >>>> --- >>>> src/python/location-importer.in | 28 +++++++++++++++++++++++++--- >>>> 1 file changed, 25 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/src/python/location-importer.in b/src/python/location-importer.in >>>> index d4b0ca2..bec0b62 100644 >>>> --- a/src/python/location-importer.in >>>> +++ b/src/python/location-importer.in >>>> @@ -393,11 +393,11 @@ class CLI(object): >>>> with self.db.transaction(): >>>> # Create some temporary tables to store parsed data >>>> self.db.execute(""" >>>> - CREATE TEMPORARY TABLE _autnums(number integer, organization text, source text NOT NULL) >>>> + CREATE TEMPORARY TABLE _autnums(number integer NOT NULL, organization text NOT NULL, source text NOT NULL) >>>> ON COMMIT DROP; >>>> CREATE UNIQUE INDEX _autnums_number ON _autnums(number); >>>> >>>> - CREATE TEMPORARY TABLE _organizations(handle text, name text NOT NULL, source text NOT NULL) >>>> + CREATE TEMPORARY TABLE _organizations(handle text NOT NULL, name text NOT NULL, source text NOT NULL) >>>> ON COMMIT DROP; >>>> CREATE UNIQUE INDEX _organizations_handle ON _organizations(handle); >>>> >>>> @@ -604,10 +604,32 @@ class CLI(object): >>>> elif key == "org": >>>> autnum[key] = val.upper() >>>> >>>> + elif key == "descr": >>>> + # Save the first description line as well... >>>> + if not key in autnum: >>>> + autnum[key] = val >>>> + >>>> # Skip empty objects >>>> - if not autnum: >>>> + if not autnum or not "asn" in autnum: >>>> return >>>> >>>> + # Insert a dummy organisation handle into our temporary organisations >>>> + # table in case the AS does not have an organisation handle set, but >>>> + # has a description (a quirk often observed in APNIC area), so we can >>>> + # later display at least some string for this AS. >>>> + if not "org" in autnum: >>>> + if "descr" in autnum: >>>> + autnum["org"] = "LIBLOC-%s-ORGHANDLE" % autnum.get("asn") >>>> + >>>> + self.db.execute("INSERT INTO _organizations(handle, name, source) \ >>>> + VALUES(%s, %s, %s) ON CONFLICT (handle) DO NOTHING", >>>> + autnum.get("org"), autnum.get("descr"), source_key, >>>> + ) >>>> + else: >>>> + log.warning("ASN %s neither has an organisation handle nor a description line set, omitting" % \ >>>> + autnum.get("asn")) >>>> + return >>>> + >>>> # Insert into database >>>> self.db.execute("INSERT INTO _autnums(number, organization, source) \ >>>> VALUES(%s, %s, %s) ON CONFLICT (number) DO UPDATE SET \ >>>> -- >>>> 2.20.1 >>>> >>> >
Hello, I would rather have it property tagged so that we can use our deployment process and can potentially roll back. -Michael > On 5 Aug 2021, at 20:49, Peter Müller <peter.mueller@ipfire.org> wrote: > > Hi Michael, > >> Hey, >> >>> On 21 Jul 2021, at 22:23, Peter Müller <peter.mueller@ipfire.org> wrote: >>> >>> Hello Michael, >>> >>> thanks for your reply. >>> >>> I would leave this up to you - some data-related issues are still on my list, but I >>> am unfortunately really short on spare time at the moment. So I guess we should get >>> in production what we have at hand... :-) >> >> Since we do not make too much use of this data, yet, I would like to leave another release for a little bit and wait until the rest is coming in. > > thought about this again, I think we could apply this patch to libloc running on location01, > as we probably won't release a next version of libloc within the next few weeks - primarily > due to me lacking spare time. :-/ > > Albeit it is hacky, I think it would be worth it. What do you think? > >> I generally like the release early and often thing. We should keep doing that. > > ACK. > > Thanks, and best regards, > Peter Müller > >> >>> By the way: Thank you for fixing location01, SSH login works fine for me again. :-) >> >> -Michael >> >>> >>> Thanks, and best regards, >>> Peter Müller >>> >>> >>>> Thank you. Merged. >>>> >>>> Do we plan a release because of this soon? >>>> >>>>> On 19 Jul 2021, at 22:34, Peter Müller <peter.mueller@ipfire.org> wrote: >>>>> >>>>> A decent amount of autnum objects - especially, but not exclusively in >>>>> the APNIC sector - does not contain a link to an organisation handle. >>>>> >>>>> In such cases, this patch is going to use the first description line of >>>>> the atunum object in question (if available) as a string for its name. >>>>> The overwhelming majority of affected ASNs contains a valuable >>>>> information there, so this is almost as good as having an organisation >>>>> handle linked to it. >>>>> >>>>> Fixes: #12660 >>>>> >>>>> Signed-off-by: Peter Müller <peter.mueller@ipfire.org> >>>>> --- >>>>> src/python/location-importer.in | 28 +++++++++++++++++++++++++--- >>>>> 1 file changed, 25 insertions(+), 3 deletions(-) >>>>> >>>>> diff --git a/src/python/location-importer.in b/src/python/location-importer.in >>>>> index d4b0ca2..bec0b62 100644 >>>>> --- a/src/python/location-importer.in >>>>> +++ b/src/python/location-importer.in >>>>> @@ -393,11 +393,11 @@ class CLI(object): >>>>> with self.db.transaction(): >>>>> # Create some temporary tables to store parsed data >>>>> self.db.execute(""" >>>>> - CREATE TEMPORARY TABLE _autnums(number integer, organization text, source text NOT NULL) >>>>> + CREATE TEMPORARY TABLE _autnums(number integer NOT NULL, organization text NOT NULL, source text NOT NULL) >>>>> ON COMMIT DROP; >>>>> CREATE UNIQUE INDEX _autnums_number ON _autnums(number); >>>>> >>>>> - CREATE TEMPORARY TABLE _organizations(handle text, name text NOT NULL, source text NOT NULL) >>>>> + CREATE TEMPORARY TABLE _organizations(handle text NOT NULL, name text NOT NULL, source text NOT NULL) >>>>> ON COMMIT DROP; >>>>> CREATE UNIQUE INDEX _organizations_handle ON _organizations(handle); >>>>> >>>>> @@ -604,10 +604,32 @@ class CLI(object): >>>>> elif key == "org": >>>>> autnum[key] = val.upper() >>>>> >>>>> + elif key == "descr": >>>>> + # Save the first description line as well... >>>>> + if not key in autnum: >>>>> + autnum[key] = val >>>>> + >>>>> # Skip empty objects >>>>> - if not autnum: >>>>> + if not autnum or not "asn" in autnum: >>>>> return >>>>> >>>>> + # Insert a dummy organisation handle into our temporary organisations >>>>> + # table in case the AS does not have an organisation handle set, but >>>>> + # has a description (a quirk often observed in APNIC area), so we can >>>>> + # later display at least some string for this AS. >>>>> + if not "org" in autnum: >>>>> + if "descr" in autnum: >>>>> + autnum["org"] = "LIBLOC-%s-ORGHANDLE" % autnum.get("asn") >>>>> + >>>>> + self.db.execute("INSERT INTO _organizations(handle, name, source) \ >>>>> + VALUES(%s, %s, %s) ON CONFLICT (handle) DO NOTHING", >>>>> + autnum.get("org"), autnum.get("descr"), source_key, >>>>> + ) >>>>> + else: >>>>> + log.warning("ASN %s neither has an organisation handle nor a description line set, omitting" % \ >>>>> + autnum.get("asn")) >>>>> + return >>>>> + >>>>> # Insert into database >>>>> self.db.execute("INSERT INTO _autnums(number, organization, source) \ >>>>> VALUES(%s, %s, %s) ON CONFLICT (number) DO UPDATE SET \ >>>>> -- >>>>> 2.20.1
diff --git a/src/python/location-importer.in b/src/python/location-importer.in index d4b0ca2..bec0b62 100644 --- a/src/python/location-importer.in +++ b/src/python/location-importer.in @@ -393,11 +393,11 @@ class CLI(object): with self.db.transaction(): # Create some temporary tables to store parsed data self.db.execute(""" - CREATE TEMPORARY TABLE _autnums(number integer, organization text, source text NOT NULL) + CREATE TEMPORARY TABLE _autnums(number integer NOT NULL, organization text NOT NULL, source text NOT NULL) ON COMMIT DROP; CREATE UNIQUE INDEX _autnums_number ON _autnums(number); - CREATE TEMPORARY TABLE _organizations(handle text, name text NOT NULL, source text NOT NULL) + CREATE TEMPORARY TABLE _organizations(handle text NOT NULL, name text NOT NULL, source text NOT NULL) ON COMMIT DROP; CREATE UNIQUE INDEX _organizations_handle ON _organizations(handle); @@ -604,10 +604,32 @@ class CLI(object): elif key == "org": autnum[key] = val.upper() + elif key == "descr": + # Save the first description line as well... + if not key in autnum: + autnum[key] = val + # Skip empty objects - if not autnum: + if not autnum or not "asn" in autnum: return + # Insert a dummy organisation handle into our temporary organisations + # table in case the AS does not have an organisation handle set, but + # has a description (a quirk often observed in APNIC area), so we can + # later display at least some string for this AS. + if not "org" in autnum: + if "descr" in autnum: + autnum["org"] = "LIBLOC-%s-ORGHANDLE" % autnum.get("asn") + + self.db.execute("INSERT INTO _organizations(handle, name, source) \ + VALUES(%s, %s, %s) ON CONFLICT (handle) DO NOTHING", + autnum.get("org"), autnum.get("descr"), source_key, + ) + else: + log.warning("ASN %s neither has an organisation handle nor a description line set, omitting" % \ + autnum.get("asn")) + return + # Insert into database self.db.execute("INSERT INTO _autnums(number, organization, source) \ VALUES(%s, %s, %s) ON CONFLICT (number) DO UPDATE SET \