some minor cleanups, argument renaming for clarity, etc

This commit is contained in:
Gered 2016-02-28 15:31:26 -05:00
parent 2ab1aaffe0
commit cee04ee347
6 changed files with 86 additions and 78 deletions

View file

@ -11,7 +11,7 @@
vwowrla.core.utils))
(defn- ignore-interaction?
[entity-name ignore-entity-list {:keys [target-name source-name] :as parsed-line}]
[entity-name ignore-entity-list {:keys [target-name source-name] :as event}]
(and (or (= entity-name target-name)
(= entity-name source-name))
(or (contained-in? target-name ignore-entity-list)
@ -21,20 +21,20 @@
"returns true if the given parsed combat log line is between entities that have
been specified to ignore interactions between for the purposes of detecting
an encounter trigger"
[encounter :- Encounter
parsed-line :- CombatEvent]
[encounter :- Encounter
event :- CombatEvent]
(->> (:entities encounter)
(filter
(fn [[entity-name entity-props]]
(seq (:ignore-interactions-with entity-props))))
(filter
(fn [[entity-name entity-props]]
(ignore-interaction? entity-name (:ignore-interactions-with entity-props) parsed-line)))
(ignore-interaction? entity-name (:ignore-interactions-with entity-props) event)))
(seq)
(boolean)))
(defn- ignore-skill?
[entity-name ignore-skill-list {:keys [source-name skill] :as parsed-line}]
[entity-name ignore-skill-list {:keys [source-name skill] :as event}]
(and (= entity-name source-name)
(contained-in? skill ignore-skill-list)))
@ -42,15 +42,15 @@
"returns true if the given parsed combat log line is for an encounter entity
that is using a skill that has been specifically indicated should be ignored
for the purposes of triggering an encounter"
[encounter :- Encounter
parsed-line :- CombatEvent]
[encounter :- Encounter
event :- CombatEvent]
(->> (:entities encounter)
(filter
(fn [[entity-name entity-props]]
(seq (:ignore-skills entity-props))))
(filter
(fn [[entity-name entity-props]]
(ignore-skill? entity-name (:ignore-skills entity-props) parsed-line)))
(ignore-skill? entity-name (:ignore-skills entity-props) event)))
(seq)
(boolean)))
@ -58,7 +58,7 @@
"determines if the parsed combat log line is for an event involving any specific encounter entities which
should cause an encounter to begin, returning the name of the encounter if it should begin, or nil if no
encounter begin was detected"
[{:keys [target-name source-name damage aura-name type skill] :as parsed-line} :- CombatEvent
[{:keys [target-name source-name damage aura-name type skill] :as event} :- CombatEvent
data :- RaidAnalysis]
(if-let [encounter-name (or (find-defined-encounter-name target-name)
(find-defined-encounter-name source-name))]
@ -67,10 +67,10 @@
(not (contained-in? skill non-combat-starting-skills)))
(let [encounter (get defined-encounters encounter-name)]
(cond
(ignored-interaction-event? encounter parsed-line)
(ignored-interaction-event? encounter event)
nil
(ignored-skill-event? encounter parsed-line)
(ignored-skill-event? encounter event)
nil
; if either of these are defined, then their criteria MUST pass to

View file

@ -7,7 +7,7 @@
(keyword event)))
(defmethod handle-event :skill-damage-to-target
[{:keys [source-name skill target-name damage damage-type absorbed resisted blocked crit? timestamp] :as parsed} data]
[{:keys [source-name skill target-name damage damage-type absorbed resisted blocked crit? timestamp] :as event} data]
(analysis/process-source-to-target-damage
source-name
target-name
@ -23,7 +23,7 @@
data))
(defmethod handle-event :skill-avoided-by-target
[{:keys [source-name target-name skill avoidance-method timestamp] :as parsed} data]
[{:keys [source-name target-name skill avoidance-method timestamp] :as event} data]
(analysis/process-source-to-target-damage
source-name
target-name
@ -34,7 +34,7 @@
data))
(defmethod handle-event :damage-reflected
[{:keys [source-name target-name damage damage-type timestamp] :as parsed} data]
[{:keys [source-name target-name damage damage-type timestamp] :as event} data]
(analysis/process-source-to-target-damage
source-name
target-name
@ -47,7 +47,7 @@
data))
(defmethod handle-event :melee-damage-to-target
[{:keys [source-name target-name damage damage-type hit-type absorbed resisted blocked crit? timestamp] :as parsed} data]
[{:keys [source-name target-name damage damage-type hit-type absorbed resisted blocked crit? timestamp] :as event} data]
(analysis/process-source-to-target-damage
source-name
target-name
@ -64,7 +64,7 @@
data))
(defmethod handle-event :melee-avoided-by-target
[{:keys [source-name target-name avoidance-method timestamp] :as parsed} data]
[{:keys [source-name target-name avoidance-method timestamp] :as event} data]
(analysis/process-source-to-target-damage
source-name
target-name
@ -75,11 +75,11 @@
data))
(defmethod handle-event :skill-interrupted-by-target
[{:keys [source-name target-name skill timestamp] :as parsed} data]
[{:keys [source-name target-name skill timestamp] :as event} data]
data)
(defmethod handle-event :dot-damages-target
[{:keys [source-name skill target-name damage damage-type absorbed resisted timestamp] :as parsed} data]
[{:keys [source-name skill target-name damage damage-type absorbed resisted timestamp] :as event} data]
(analysis/process-source-to-target-damage
source-name
target-name
@ -94,28 +94,28 @@
data))
(defmethod handle-event :cast-begins
[{:keys [source-name skill spell? timestamp] :as parsed} data]
[{:keys [source-name skill spell? timestamp] :as event} data]
; don't think we really care about this ?
data)
(defmethod handle-event :skill-performed-on-target
[{:keys [source-name target-name skill spell? extra timestamp] :as parsed} data]
[{:keys [source-name target-name skill spell? extra timestamp] :as event} data]
(analysis/process-source-to-target-cast source-name target-name skill timestamp data))
(defmethod handle-event :cast
[{:keys [source-name skill spell? timestamp] :as parsed} data]
[{:keys [source-name skill spell? timestamp] :as event} data]
(analysis/process-entity-cast source-name skill timestamp data))
(defmethod handle-event :skill-heals-target
[{:keys [source-name skill crit? target-name amount timestamp] :as parsed} data]
[{:keys [source-name skill crit? target-name amount timestamp] :as event} data]
data)
(defmethod handle-event :resource-gained
[{:keys [target-name amount resource-type source-name skill timestamp] :as parsed} data]
[{:keys [target-name amount resource-type source-name skill timestamp] :as event} data]
data)
(defmethod handle-event :resource-lost
[{:keys [target-name amount resource-type source-name skill timestamp] :as parsed} data]
[{:keys [target-name amount resource-type source-name skill timestamp] :as event} data]
(condp = resource-type
:health (analysis/process-source-to-target-damage
source-name
@ -130,32 +130,32 @@
data))
(defmethod handle-event :special-gained
[{:keys [target-name special source timestamp] :as parsed} data]
[{:keys [target-name special source timestamp] :as event} data]
data)
(defmethod handle-event :aura-gained
[{:keys [target-name aura-name aura-type stacks timestamp] :as parsed} data]
[{:keys [target-name aura-name aura-type stacks timestamp] :as event} data]
data)
(defmethod handle-event :aura-lost
[{:keys [target-name aura-name faded? stacks timestamp] :as parsed} data]
[{:keys [target-name aura-name faded? stacks timestamp] :as event} data]
data)
(defmethod handle-event :other-damage
[{:keys [target-name damage damage-type resisted absorbed source timestamp] :as parsed} data]
[{:keys [target-name damage damage-type resisted absorbed source timestamp] :as event} data]
data)
(defmethod handle-event :death
[{:keys [source-name timestamp] :as parsed} data]
[{:keys [source-name timestamp] :as event} data]
(analysis/process-entity-death source-name timestamp data))
(defmethod handle-event :ignored
[{:keys [line] :as parsed} data]
[{:keys [line] :as event} data]
#_(println "[WARN] *** IGNORED ***" line)
data)
(defmethod handle-event :default
[{:keys [line] :as parsed} data]
[{:keys [line] :as event} data]
(println "[WARN] *** UNRECOGNIZED ***" line)
data)

View file

@ -790,3 +790,13 @@
:source-name %1)}
])
(defn find-matcher
[^String line]
(->> regex-matchers
(filter #(re-matches (:regex %) line))
(first)))
(defn get-line-regex-matches
[^String line matcher]
(rest (re-matches (:regex matcher) line)))

View file

@ -8,7 +8,7 @@
[vwowrla.core.encounters.detection :refer [detect-encounter-end detect-encounter-triggered]]
[vwowrla.core.encounters.analysis :refer [begin-encounter end-encounter]]
[vwowrla.core.events.handlers :refer [handle-event]]
[vwowrla.core.events.matchers :refer [regex-matchers]])
[vwowrla.core.events.matchers :refer [find-matcher get-line-regex-matches]])
(:use
vwowrla.core.schemas
vwowrla.core.preparsing
@ -19,61 +19,59 @@
(not (nil? (:active-encounter data))))
(defn- ->ignored-event
[parsed-line]
(assoc parsed-line
[event]
(assoc event
:id :ignored
:logfmt :ignored))
(defn ->unrecognized-event
[parsed-line]
(assoc parsed-line
[event]
(assoc event
:id :unknown
:logfmt :unknown
:event :unknown))
(s/defn parse-line :- CombatEvent
[^String line
[line :- s/Str
options :- ParserOptions]
(let [[timestamp stripped-line] (split-log-timestamp-and-content line)
sanitized-line (-> stripped-line
(undo-swstats-fixlogstring)
(sanitize-entity-names))
line-metadata {:timestamp (parse-log-timestamp timestamp options)
event-metadata {:timestamp (parse-log-timestamp timestamp options)
:line line}]
(if-let [matcher (->> regex-matchers
(filter #(re-matches (:regex %) sanitized-line))
(first))]
(let [regex-matches (rest (re-matches (:regex matcher) sanitized-line))
args-fn (or (:args matcher) (fn [& _]))
parsed-line (merge
line-metadata
(select-keys matcher [:logfmt :event :id])
(apply args-fn regex-matches))]
(if (= :ignored (:event parsed-line))
(->ignored-event parsed-line)
(process-parsed-line parsed-line (:log-owner-char-name options))))
(->unrecognized-event line-metadata))))
(if-let [matcher (find-matcher sanitized-line)]
(let [matches (get-line-regex-matches sanitized-line matcher)
args-fn (or (:args matcher) (fn [& _]))
event (merge
event-metadata
(select-keys matcher [:logfmt :event :id])
(apply args-fn matches))]
(if (= :ignored (:event event))
(->ignored-event event)
(process-event event (:log-owner-char-name options))))
(->unrecognized-event event-metadata))))
(s/defn handle-line
[parsed-line :- CombatEvent
data :- RaidAnalysis]
(handle-event parsed-line data))
[event :- CombatEvent
data :- RaidAnalysis]
(handle-event event data))
(s/defn ^:private active-encounter-processing
[parsed-line :- CombatEvent
data :- RaidAnalysis]
(let [data (handle-line parsed-line data)]
(if-let [encounter-end (detect-encounter-end parsed-line data)]
(end-encounter parsed-line encounter-end data)
[event :- CombatEvent
data :- RaidAnalysis]
(let [data (handle-line event data)]
(if-let [encounter-end (detect-encounter-end event data)]
(end-encounter event encounter-end data)
data)))
(s/defn ^:private out-of-encounter-processing
[parsed-line :- CombatEvent
data :- RaidAnalysis]
(if-let [encounter-name (detect-encounter-triggered parsed-line data)]
[event :- CombatEvent
data :- RaidAnalysis]
(if-let [encounter-name (detect-encounter-triggered event data)]
(->> data
(begin-encounter encounter-name parsed-line)
(handle-line parsed-line))
(begin-encounter encounter-name event)
(handle-line event))
data))
(s/defn ^:private parse-log* :- (s/maybe RaidAnalysis)

View file

@ -1,6 +1,6 @@
(ns vwowrla.core.preparsing
(:import
(java.util Calendar Date GregorianCalendar TimeZone))
(java.util Calendar Date GregorianCalendar))
(:require
[clojure.string :as string]
[clojure.java.io :as io]
@ -14,7 +14,7 @@
(def problem-entity-name-to-fixed-name
(reduce
(fn [m problem-name]
(let [fixed-name (.replace problem-name "'s" "s")]
(let [fixed-name (.replace ^String problem-name "'s" "s")]
(-> m
(assoc-in [:problem-to-fixed problem-name] fixed-name)
(assoc-in [:fixed-to-problem fixed-name] problem-name))))
@ -42,7 +42,7 @@
[line :- s/Str]
(.replace ^String line " 's" "'s"))
(s/defn parse-log-timestamp :- Date
(s/defn parse-log-timestamp :- (s/maybe Date)
[timestamp :- s/Str
options :- ParserOptions]
(if-let [matches (re-matches #"^(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{2}):(\d{2})\.(\d{3})$" timestamp)]
@ -58,11 +58,11 @@
[line :- s/Str]
(string/split line #" " 2))
(s/defn process-parsed-line :- CombatEvent
[{:keys [source-name target-name source] :as parsed-line} :- CombatEvent
(s/defn process-event :- CombatEvent
[{:keys [source-name target-name source] :as event} :- CombatEvent
log-owner-char-name :- s/Str]
(merge
parsed-line
event
(if source-name
{:source-name (if (= "you" (string/lower-case source-name))
log-owner-char-name

View file

@ -6,11 +6,11 @@
vwowrla.core.parser))
(deftest barebones-line-parse-results
(let [parsed (parse-line "1/2 3:45:00.000 Test combat log line with 2 spaces in content part."
{:log-owner-char-name "Blasticus"
:year 2015
:timezone (TimeZone/getDefault)
:windows? false})]
(is (and (map? parsed)
(contains? parsed :timestamp)
(contains? parsed :line)))))
(let [event (parse-line "1/2 3:45:00.000 Test combat log line with 2 spaces in content part."
{:log-owner-char-name "Blasticus"
:year 2015
:timezone (TimeZone/getDefault)
:windows? false})]
(is (and (map? event)
(contains? event :timestamp)
(contains? event :line)))))