This is no longer necessary to keep in forum for lack of poor format nor statistical data keeping.
When the graph says it's running it doesn't really mean any activity is taking place, it just means the graph object told the filters to run and set its "state" variable to "running". However if any filter is stuck for any reason and doesn't send or receive the data everything freezes but the graph state remains "running". Some editors like GraphEditPlus can show states of each particular filter in the graph, so if some of them report to be stopped or paused while some others are still "running" you will see this. In most cases however you'll just see all filters "running" and won't know which of them is stuck unless you insert sample grabbers between them and tell GraphEditPlus to show grabbed samples in real time, this is a good way to understand what's really going on.
Related
Sorry if this is a dumb question. I'm still a somewhat novice dev.
I'm interested in creating a holistic view that shows the current status of every airflow job my team maintains. The point would be to simplify the view rather than having the user go into the Airflow UI to check the status. I would be interested in something along the lines of a front-end webpage that has a list of each of the DAGs and kind of a progress bar whose length depends on the number of tasks for each DAG. If a task is currently running, it would be light-green, solid green for success and red for failures. Similar to the Airflow UI but a lot simpler. I would also want the home view to show the current day with a left and right arrow to go through each day if the user is interested. Essentially it would be a airflow monitoring system for less technical users.
What would be a good way to go about this?
I'm also open to any other solutions anyone may have come up that could help with simplify monitoring a large amount of airflow jobs.
Kind of looking for some folks to help me brainstorm. Not sure if Stack is the right place for it. :)
I'll be the developer of this app so no need to pull punches as far as the technical end goes.
Currently, I'm thinking of using a standard web app where the screen will be populated by a log that I'll keep in a backend database that gets populated by a function that gets called whenever a task concludes within a DAG. The view will always show current day and whichever DAGs are scheduled to run during that day with whatever their progress is.
Airflow allows creating plugins to expose web views with FlaskAppBuilder, so you can create a view and add whatever you want in it, then add it to the Airflow UI.
I am currently creating a module that creates custom boss fights in vanilla dungeons. To accomplish this without having to make edits to existing spells used by other creatures, I've been using Stoneharry Spell Editor to create custom spells that the bosses use.
The spells that I created are doing exactly what I want them to do but the majority of the spells that aren't instant cast will not have a cast timer shown while the boss is casting the spell.
Some of these spells haven't been edited aside from the damage. Just a straight up copy of a basic spell like Lightning Bolt. I searched through all of the attributes and there was no difference between spells that would show the cast timer and those that wouldn't.
What determines whether or not a spell with have a visible cast bar and how do I fix the spells that don't?
I have gone through the process of creating a custom MPQ file to patch my client in addition to the server side DBC file.
I was unable to find the cause of why some of these spells were not showing a cast bar but I did find a flag that can be set to force the display of the cast bar as a fix to the issue.
Setting AttributeEx4 with the value 268435456 (hex value 0x10000000) will force it to display. I confirmed this flag worked with all of the spells that were previously not showing a cast bar.
Might be related, might be unrelated, but from what I understand the 3.3.5 client and blizz's own UI uses events in the combat log to show stuff like cast bars in the UI frame. And because 3.3.5 client famously has bugs that the combat log gets frozen and stuck, sometimes these things disappear. People also call this famous bug other names like the "recount bug", since it leads to addons like Recount showing the wrong values for damage and such, because they stop receiving the correct events from the combat log. Notable thing is though the bug is very strange, it does not always completely freeze everything but rather still let some of the events through, leading the numbers in damage meter addons to change but be completely wrong.
I have stumbled to the same problem with regular mobs and bosses, noticed that some of them suddenly stop showing things like cast bars and buffs/debuffs after the combat log bug happens. The bosses still make their animations for casting and stuff properly, but they don't show in the UI. That's what lead me to think that the stuff happening in the "world" are handled by server sending opcodes but the stuff that is shown in your UI frame are from the combat log.
So first make sure you're using a combat log clearing addon or a macro, like this one:
https://github.com/anzz1/CLFix
Yes, I know that code runs the CombatLogClearEntires() every single frame, but from what I have tested I simply found every other addon that clears the log more infrequently to the combat log bug sometimes happening. Only running it every frame has spared me from any more combat log bugs. See, the thing about that bug is that you have to clear the log before it happens, clearing it afterwards won't usually help and you need to reload the whole UI.
Secondly, what you could do is check what your client sees happening in the combat log by printing the combat log events and comparing the different spell events that way. This can be achieved easily by making a frame, registering the COMBAT_LOG_EVENT_UNFILTERED event and printing the results.
Like this, just wrap that code into a .lua addon to see what's what:
local f = CreateFrame("Frame", nil, UIParent)
f:SetScript("OnEvent", function(self, event, ...)
-- timestamp, eventType, srcGUID, sourceName, srcFlags, destGUID, destName, destFlags, spellID, spellName, arg1, arg2, arg3, ...
print(...)
end)
f:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
Graphite intermittently displays cached (old) data and current data if I continuously update it.
Here's what I'm doing:
First I setup a graph to show the last 15 minutes, then continuously hit the "Update Graph" button on the Graphite Composer window. When I do this, I notice some odd behavior:
The graph is drawn with data points going up to the current time X. (Good)
After hitting refresh several times, the graph updates to show points going up to X + 1. (Good)
I continue to hit update and graph reverts back to the view from step 1. (Bad)
Eventually the graph updates correctly and steps forward again, showing all the data.
I found that if I set DEFAULT_CACHE_DURATION inside local_settings.py to 1, this fixes the problem. So I know this issue is related to caching.
But I'm still confused: Why does Graphite sometimes show me old cached data, and sometimes show me current data? It seems like Graphite should eithe show me cached data, or current data. It should never show me current data...then old cached data.
Feel like I'm missing something.
I'm hesitant to set the DEFAULT_CACHE_DURATION to 1, since this seems like a kludge. Any idea how to troubleshoot this further?
I have been playing with Grafana for a while, and got stuck with the following issue.
I need to produce a chart that displays the round trip time for some REST calls my application is doing.
I am using Dropwizard metrics and starting a PausableTimer when I fire the call, and stop it when the expected response comes back. From Grafana, then, I can see the data source I need but when I build the graph, I am forced to apply some statistical calculation on my data (stddev, mean, max, min, etc.) whereas all I need is to chart the numbers from the series.
Below is a screenshot of the config part I am referring to:
The dropdown contains a number of transformations to apply to the priginal data, and I cannot find a way to tell Grafana that I wans to display the data the way it is.
I am not really sure how to do this, had anyone had this issue before -- and solved it?
Thanks in advance.
I'm coming from a SCORM end and trying to figure out two related issues with how to do update and find the most recent data (ie, looking for best practices).
In SCORM I'd have a set of activities that would all store their answers and scores (easily understandable from the docs etc). The "how" I'm after is specifically related to resuming the set of activities multiple times, and hitting "reset" and submitting a different answer to a single activity after a statement has been sent in.
From what I read with xAPI it states that statements are immutable - so how would I go about this.
My first thought was that I'd make the statement id generated from the activity id and void the old answer when it changes - but that sounds wrong (not least because it reads like you can't re-use the id even with voiding).
So it looks like the Statement id needs to be unique, which would mean that multiple identical Objects would be found - so would I have to look through every attempt and check for the latest one?
I'm currently looking at using xAPIWrapper in the middle.
Moving from SCORM to xAPI requires a change of mindset. SCORM deals with statuses which get updated; xAPI logs events like a journal.
You can think of it like Facebook. You post a photo of your new cat; a month later you post a photo of your cat 1 month older. There's no need to go back and delete the old post. If you want the latest photo of your cat you just go and get the most recent photo tagged "Ryochet's cat". You can also look at older photos to see how your cat developed. xAPI is like that activity stream on Facebook.
So, if somebody scores 10 points on their first attempt, then 20 points on their second attempt, you'd simply send a second set of statements about the 2nd attempt. There's no need to get rid of the statements about the old attempt, that happened and is useful data to see how the learner developed.