Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...


and register it with runScheduledJobs()
var myJobs = getMyJobs(minute.toInt, hour.toInt, day_of_week.toInt)
myAction.myActionJob(myJobs)

2b)
create class myAction, ‘ObjectService’ is for example UserService, in that case ‘parameters’ in Jobs MongoDB collection contains user id:

Code Block
languagescala
linenumberstrue
collapsetrue
package models

import java.util.Date
import services.SchedulerService
import services.DI

object myAction {
val scheduler: SchedulerService =  DI.injector.getInstance(classOf[SchedulerService])
val objects: ObjectService =  DI.injector.getInstance(classOf[ObjectService])
 /**
  * ‘Do something’ for each job returned by getMyJobs
  */
 def myActionJob(listJob: List[TimerJob]) = {
   for (job <- listJob){
     job.parameters match {
       case Some(id) => {
         objects.findById(id) match {
           case Some(object) => {
             job.lastJobTime match {
               case Some(date) => {
                 ‘Do something’
               }
               case None => Logger.debug("LastJobTime not found")
             }
           }
           case None => Logger.debug(“Object not found")
         }
         scheduler.updateLastRun(‘jobName’) //sets job’s name for example ”myJob[“ + id + "]")
       }
       case None => Logger.debug("Parameters not found")
     }
   }
 }



2c)
implement ‘Do something’ in myAction (see 2b)




Note that ‘day_of_month’ is part of the TimerJob model but it is not implemented in scheduler.getJobByTime
Adding it is straightforward:
1) in app > services > SchedulerService.scala add day_of_month (or day)
2) in app > services > mongoldb > MongoDBSchedulerService.scala

2a) update
def getJobByTime(minute: Integer, hour: Integer, day_of_week: Integer, day: Integer): List[TimerJob] ={

    val jobs = Jobs.find(
      $and(
        // either day exists AND the value is 'day' OR day does not exist
        $or($and("day" $exists true, MongoDBObject("day" -> 1)),
        // either day_of_week exists AND the value is 'day' OR day_of_week does not exist
        $or($and("day_of_week" $exists true, MongoDBObject("day_of_week" -> 1)), "day_of_week" $exists false),
        // either hour exists AND the value is 'hour' OR hour does not exist
        $or($and("hour" $exists true, MongoDBObject("hour" -> 7)), "hour" $exists false),
        // either minute exists AND the value is 'minute' OR minute does not exist
        $or($and("minute" $exists true, MongoDBObject("minute" -> 0)), "minute" $exists false)
      )
    )

2b) update

Code Block
languagescala
linenumberstrue
collapsetrue
def updateJobTime(name: String, minute: Option[Integer], hour: Option[Integer], day_of_week: Option[Integer], day: Option[Integer], freq: Option[String]) = {
    if (minute == None){
      Jobs.dao.update(MongoDBObject("name" -> name), $unset("minute"))
    }
    else {
      Jobs.dao.update(MongoDBObject("name" -> name), $set("minute" -> minute))
    }

    if (hour == None){
      Jobs.dao.update(MongoDBObject("name" -> name), $unset("hour"))
    }
    else {
      Jobs.dao.update(MongoDBObject("name" -> name), $set("hour" -> hour))
    }

    if (day_of_week == None){
      Jobs.dao.update(MongoDBObject("name" -> name), $unset("day_of_week"))
    }
    else {
      Jobs.dao.update(MongoDBObject("name" -> name), $set("day_of_week" -> day_of_week))
    }

    if (day == None){
      Jobs.dao.update(MongoDBObject("name" -> name), $unset("day"))
    }
    else {
      Jobs.dao.update(MongoDBObject("name" -> name), $set("day" -> day))
    }

    Jobs.dao.update(MongoDBObject("name" -> name), $set("frequency" -> freq))
  }


 

2c) update
add extra parameter (None) to updateEmailJob in UpdateJobTime


Testing:
1)
app > util > Mail.scala
in  def

Code Block
languagescala
def sendEmail(subject: String, user: Option[User], recipient: User, body: Html) {

...


	if (recipient.email.isDefined)

...

 {
    	Logger.debug("Subject:" + subject + ", From:" + emailAddress(user) + ", Recipient: " + emailAddress(Some(recipient)) + ", Body:")

...


		//sendEmail(subject, emailAddress(user), emailAddress(Some(recipient))::Nil, body)

...


		sendEmail(subject, emailAddress(user), List("

...

yourEMail@illinois.edu"), body)

...


	}
}


  }
2) securesocial.conf
override in custom.conf
use smtp only from nasa ncsa network

smtp.host=smtp.ncsa.illinois.edu
smtp.from="ondrejce@illinois.edu"

...