Skip to content

Commit 75f5fae

Browse files
committed
fix comment after review
1 parent 8db7d6a commit 75f5fae

File tree

2 files changed

+47
-34
lines changed

2 files changed

+47
-34
lines changed

otus-16/src/otus_16/homework.clj

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
[clojure.string :as str]
55
[clojure.core.reducers :as r]))
66

7+
(def log-regex
8+
#"^([\d+.]+) (\S+) (\S+) (\[[\w+/]+:[\w+:]+ \+\d+\]) \"(.+?)\" (\d{3}) (\d+) \"([^\"]+)\" \"(.+?)\"")
9+
710
(defn parse-log
811
[^String log]
9-
(let [regex #"^([\d+.]+) (\S+) (\S+) (\[[\w+/]+:[\w+:]+ \+\d+\]) \"(.+?)\" (\d{3}) (\d+) \"([^\"]+)\" \"(.+?)\""
10-
[_ ip user-name date-time request response size referer user-agent] (re-find regex log)]
12+
(let [[_ ip user-name date-time request response size referer user-agent] (re-find log-regex log)]
1113
{:ip ip
1214
:user-name user-name
1315
:date-time date-time
@@ -19,28 +21,31 @@
1921

2022
(defn get-logs-paths
2123
[dir-path]
22-
(->> (io/as-file dir-path)
23-
(.listFiles)
24-
(filter #(.isFile %))
25-
(map #(.getPath %))))
24+
(->> (io/as-file dir-path)
25+
(file-seq)
26+
(filter #(.isFile %))))
2627

2728
(defn read-logs
2829
[logs]
2930
(map #(io/reader %) logs))
3031

32+
(defn ->url [log]
33+
(-> log :request (str/split #" ") first))
34+
3135
(defn filter-by-url
3236
[url logs]
3337
(if (= url :all)
3438
logs
35-
(letfn [(->url [log] (-> log :request (str/split #" ") second))]
36-
(r/filter #(= url (->url %)) logs))))
39+
(r/filter #(= url (->url %)) logs)))
40+
41+
(defn ->referer [log]
42+
(-> log :referer))
3743

3844
(defn filter-by-referer
3945
[referer logs]
4046
(if (= referer :all)
4147
logs
42-
(letfn [(->referer [log] (-> log :referer))]
43-
(r/filter #(= referer (->referer %)) logs))))
48+
(r/filter #(= referer (->referer %)) logs)))
4449

4550
(defn close-logs
4651
[logs]
@@ -59,31 +64,26 @@
5964
(r/map #(parse-int-safe (:size %)))
6065
(r/fold +)))
6166

67+
(defn process-partition
68+
[logs {:keys [url referrer]}]
69+
(->> logs
70+
(map parse-log)
71+
(filter-by-url url)
72+
(filter-by-referer referrer)))
73+
6274
(defn sum-partition
6375
[partition]
6476
(reduce #(+ %1 (sum-size %2))
6577
0
6678
partition))
6779

6880
(defn process-log
69-
[log-file &
70-
{:keys [url referrer]}]
71-
(->> log-file
72-
(line-seq)
73-
(partition-all 5000)
74-
(pmap #(map parse-log %))
75-
(filter-by-url url)
76-
(filter-by-referer referrer)
77-
(sum-partition)))
78-
79-
(comment
80-
(time
81-
(let [file (io/reader "./logs/access.log.2")]
82-
(-> file
83-
(process-log {:url :all :referrer :all})
84-
(println))
85-
(.close file))))
86-
81+
[log-file filter-params]
82+
(->> log-file
83+
(line-seq)
84+
(partition-all 5000)
85+
(pmap #(process-partition % filter-params))
86+
(sum-partition)))
8787

8888
(defn solution
8989
[& {:keys [url referrer]
@@ -92,14 +92,14 @@
9292
get-logs-paths
9393
read-logs)]
9494
(->> logs
95-
(pmap #(process-log % :url url :referrer referrer))
95+
(pmap #(process-log % {:url url :referrer referrer}))
9696
(reduce +)
9797
(println "Bytes:"))
9898
(close-logs logs)))
9999

100100
(comment
101101
;; возможные вызовы функции
102-
(time (solution))
103-
(solution :url "some-url")
104-
(solution :referrer "some-referrer")
105-
(solution :url "some-url" :referrer "some-referrer"))
102+
(time (solution))
103+
(solution :url "some-url")
104+
(solution :referrer "some-referrer")
105+
(solution :url "some-url" :referrer "some-referrer"))
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11
(ns otus-16.homework-test
22
(:require [clojure.test :refer :all]
3-
[otus-16.core :refer :all]))
3+
[otus-16.homework :as sut]))
44

55

6+
(def stub-row "66.249.68.12 - - [20/Sep/2020:22:11:20 +0000] \"GET /%D0%BC%D0%B0%D0%BB%D0%B5%D0%BD%D1%8C%D0%BA%D0%B8%D0%B9-%D0%BC%D0%B0%D0%BB%D1%8C%D1%87%D0%B8%D0%BA-%D0%BF%D0%BE-%D0%B8%D0%BC%D0%B5%D0%BD%D0%B8-%D0%9D%D1%83%D1%80%D0%B1%D0%B5%D0%BA-%D0%B6%D0%B8%D0%BB-%D0%B2-%D0%BD%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9/?p=2 HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.110 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)\" \"-\"")
67

8+
(deftest parse-log-test
9+
(testing "parse-log"
10+
(is (= {:ip "66.249.68.12"
11+
:user-name "-",
12+
:date-time "-",
13+
:request "[20/Sep/2020:22:11:20 +0000]",
14+
:response
15+
"GET /%D0%BC%D0%B0%D0%BB%D0%B5%D0%BD%D1%8C%D0%BA%D0%B8%D0%B9-%D0%BC%D0%B0%D0%BB%D1%8C%D1%87%D0%B8%D0%BA-%D0%BF%D0%BE-%D0%B8%D0%BC%D0%B5%D0%BD%D0%B8-%D0%9D%D1%83%D1%80%D0%B1%D0%B5%D0%BA-%D0%B6%D0%B8%D0%BB-%D0%B2-%D0%BD%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%BE%D0%B9/?p=2 HTTP/1.1",
16+
:size "304",
17+
:referer "0",
18+
:user-agent "-"}
19+
(sut/parse-log stub-row)))))

0 commit comments

Comments
 (0)