angch.venice.1.12.27.source-code.test-geoip-country-lookup.venice Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of venice Show documentation
Show all versions of venice Show documentation
Venice, a sandboxed Lisp implemented in Java.
;;;; __ __ _
;;;; \ \ / /__ _ __ (_) ___ ___
;;;; \ \/ / _ \ '_ \| |/ __/ _ \
;;;; \ / __/ | | | | (_| __/
;;;; \/ \___|_| |_|_|\___\___|
;;;;
;;;;
;;;; Copyright 2017-2024 Venice
;;;;
;;;; Licensed under the Apache License, Version 2.0 (the "License");
;;;; you may not use this file except in compliance with the License.
;;;; You may obtain a copy of the License at
;;;;
;;;; http://www.apache.org/licenses/LICENSE-2.0
;;;;
;;;; Unless required by applicable law or agreed to in writing, software
;;;; distributed under the License is distributed on an "AS IS" BASIS,
;;;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;;;; See the License for the specific language governing permissions and
;;;; limitations under the License.
(do
(ns test)
(load-module :geoip)
;; The MaxMind country database.
(def maxmind-country-zip "resources/geoip-country.zip")
(def ip-addresses-file "resources/ip-addresses.txt")
(defn create-resolver []
; this may take some time
(println "Parsing MaxMind DB ...")
(geoip/ip-to-country-resolver maxmind-country-zip))
(defn load-ip-addresses []
(->> (io/slurp ip-addresses-file :binary false)
(str/split-lines)))
(def resolver (create-resolver))
(def ip-addresses (load-ip-addresses))
(defn lookup-ip [ip]
(resolver ip))
(defn process [ip-addresses]
(map resolver ip-addresses)
nil)
(defn run []
(process ip-addresses))
(defn run-parallel []
(let [data (flatten (repeat 10 ip-addresses))
threads (max 1 (/ (cpus) 2))
work (partition threads threads [] data)
futures (map #(future (partial process %)) work)]
(map deref futures)
nil))
; Performance: calling function 'test/process' with 974 IP addresses
; Activate macroexpansion in the REPL to run the tests!
;
; Venice threads time per IP perf test
; ------ ------- ----------- --------------------------
; 1.8.13 1 1.1us (perf (test/run) 4000 1000)
; (test/lookup-ip "41.216.186.131")
; (perf (test/run) 4000 100)
; (println (prof :data-formatted :anon-fn))
)