COMBAT_LOG_EVENT_UNFILTERED
function(...)
    local subEvent = select(3, ...) or ""
    local caster = select(6, ...) or ""
    local amount = select(16, ...) or 0
    local spellName = select(14, ...) or ""
    if subEvent == "SWING_DAMAGE" then
        amount = select(13, ...) or 0
    end
    if subEvent == "SPELL_HEAL" or subEvent == "SPELL_PERIODIC_HEAL" then
        overheal = select(17, ...) or 0
        amount = amount - overheal
    end
    if caster == UnitName("player") and amount ~= nil and (subEvent == "SPELL_HEAL" or subEvent == "SPELL_PERIODIC_HEAL") then
        aura_env.healtotal = aura_env.healtotal + amount
    end
    if caster == UnitName("player") and amount ~= nil and (subEvent == "SPELL_DAMAGE" or subEvent == "SPELL_PERIODIC_DAMAGE" or subEvent == "SWING_DAMAGE") then
        aura_env.dmgtotal = aura_env.dmgtotal + amount
    end
end

DISPLAY
function()
    local output = ""
    local elapsed_time = GetTime() - aura_env.starttime
    aura_env.dps = math.floor(aura_env.dmgtotal / elapsed_time)
    aura_env.hps = math.floor(aura_env.healtotal / elapsed_time)
    if aura_env.dps > 1e3 then
        output = output .. "DPS: " .. math.floor(aura_env.dps / 1e3) .. "k    "
    elseif
        aura_env.dps > 1e6 then
        output = output .. "DPS: " .. (math.floor((aura_env.dps / 1e6) / 100) * 100) .. "M    "
    end
    if aura_env.hps > 1e3 then
        output = output .. "HPS: " .. math.floor(aura_env.hps / 1e3) .. "k    "
    elseif
        aura_env.hps > 1e6 then
        output = output .. "HPS: " .. (math.floor((aura_env.hps / 1e6) / 100) * 100) .. "M    "
    end
    if WeakAuras.IsOptionsOpen() then
        return "DPS: 985k    HPS: 312k"
    end
    return output
end

INIT
aura_env.starttime = GetTime()
aura_env.dps = 0
aura_env.hps = 0
aura_env.dmgtotal = 0
aura_env.healtotal = 0
