I have a sinatra (ruby) based web application which is used to control the workflow for end users.
It appears there is one task that can take so long that the session is nil at the time it is ready to perform the next step. It results in an error message and the task is not completed properly.
I want to increase the session timeout (if it is possible at all). But first, since I have not explicitly set it, I want to know the actual value of the timeout interval. Is there a way to access and print that?
Related
I have multiple batches that are using different 3rd party apis to get and store/update data. the connections are made via laravels http request. all batches have about 6k jobs. Because all jobs are important I need to log the failed ones and nofiy the user.
Sometimes the response returns an error for all jobs. sometimes just a connection error or an error because the server cant process those requests.
The batch automatically cancels on first failure. But is there a way to cancel the batch if there are multiple failues (on nth failure) not just first?
First turn off normal batch error handling, then implement your own:
Initialize a counter with zero.
Whenever an error occurs, increase that counter.
Whenever that counter reaches/exceeds 5, fail the batch.
The concise implementation depends on the batch system you are working with.
Writing a Web Performance Test for a process that will run for an undetermined time, and have to put a refresh command in a while that runs until the process state indicates it is done.
The refresh command consumes about 3 seconds. so do not want it running constantly in the loop. So, am trying to find a sleep/wait function to stop the execution between loops.
The only reference i've found is for Thread.Sleep which seems to do the job.
BUT, this method seems to also stop the test's timers. so, however many times the loop runs, and whatever the actual time taken by the process, the test report will only show the cumulative time of the refresh statements.
Is there another method that will not stop the test's timers?
If the refresh is in a loop within the Web Performance Test then set a suitable "think time" on the request. This will pause the test after the response is received. (Think times are normally used to simulate the time a person spends reading a web page and filling in forms etc before the next request is issued.)
Think times are set via the properties of the request. Think times (also reporting names) for all requests in a test can be viewed and modified using the "Set request detail" command accessed using the (rightmost) command icon in eth web test editor.
Think times can also be set or adjusted in the PreRequest method of a WebTestRequest plugin.
I'm trying to run a scenario that ramps up each thread by logging them in once, loops through an business action for an hour with pacing, and logouts as it ramps down.
Ideally the threads should not log out all at once, as such it I wanted to find a way to execute a logout action for each thread ramping down.
I have tried using stepping and ultimate thread groups, however for ramp down, the threads are being stopped.
In addition, I have tried the following scenario: 1) login, 2)runtime controller scheduled for one hour with the business action, 3) logout. This however, results in premature aborts for the threads that are still executing the business action once it reaches one hour.
Any help, even implementing this in beanshell, would be greatly appreciated.
You can just use a TearDown Threadgroup. That will always be executed once your test is over.
You can use a thread group which sets a jmeter property, let's call the property "isRunning", in a pre or post processor, next that thread has a test action set to pause for the duration of the test. After the pause set the property "isRunning" to false.
When the user logs on in another thread group (your test case) grab the "isRunning" property and store the value in a jmeter variable for the thread. Once the user logs in put your business case in a while loop with the jmeter variable created using the "isRunning" property as the condtion.
Get the value of the "isRunning" property somewhere towards the end of your business case and update your jmeter variable. Put the log out controller outside of the while loop. When the first thread group sets the "isRunning" to false, the while loop in your other threads will finish executing the use case and log out when it sees that the while condition is no longer met.
If you use any type of random think timers and ramp time, the threads should essentially step down on their own, due to ramp time offsetting the start of the use case and random think times.
Not sure if this is the best way to go about this, but I needed to do the same thing you are looking for and this proved to be a feasible workaround.
Is there a way to make a global change to the default timeout for the element level waits in the page-object gem? We use the default 5 seconds but need to change it once in a while depending on the environment. Our main test environment runs on several servers so responds times are very fast. However we have one or two environments that run on one server only and respond times are a little slow. I would like to change this value based on the environment. I realize this is not ideal but it is something I was asked to look into.
Thanks.
https://github.com/cheezy/page-object/issues/79
Two things to set. PageObject.default_page_wait will set the default timeout value for page level actions and PageObject.default_element_wait will set the default timeout value for element level actions.
I'm running Coldfusion8 and have a cfc, that loops through a set of database records.
Each record contains two fields image path and image file. I'm constructing a path for every image, upload it to a temp folder, resize and then store it to S3.
Depending on the number of records, this may take quite some time and I have not been able to successfully finish the upload cycle with larger sets of images (eventually times out).
I'm already settings my timeout threshold to 5000, but it still does not seem enough.
I can pick up where I left, because I'm keeping a media log to check against, before uploading to S3. This way I can finish the task, but I need to trigger this function 5x to upload 400 items.
Question:
Is there way to avoid a timeout without setting (in S3 case) httptimeout to some 50000000? And would it make sense to run this in a CFTHREAD or will this be a problem if the user leaves the import page while the system is still uploading?
Thanks for some insights.
You can use a CFthread to perform the task, but make sure you LOCK THE SCOPE! otherwise you could end up running this memory intensive proccess several times over and kill the server, you only want this proccess running once at a time if its so intensive.
You have other options though, if this is not something that your application users will need to run and its a one-off proccess your doing, you could set a scheduled task with an exceedingly long timeout to run overnight, when the server is not very high use, This allows you to set the timeout independently to the application so the rest of the application is unaffected by global timeout changes.
Another option is, if this is something users will be doing semi-regularly then a thread which pushes a notification via email, log or other means (Ajax or Websockets) letting the user know they're task is complete. This has the upside that timeouts can be changed, calculated on the amount of data to be proccessed dynamically at thread generation. However, if your not careful you can overload your server with many threads proccessing large datasets (plus log file read-write locks will be harder to manage).
I would encourage you though, to take this away and see what solution works for you and post your final solution so others can see what the outcome is.
Hope this helps.