The Scheduler Service handles scheduling and conflict management of resources. A configuration file defines the possible activities and how many resources each activity consume. The application refers to these activities by name when a new booking is created to make it possible for the service to ensure there are no resource conflicts.
Resource management is naive, in that it only indicates potential conflicts. The application layer may still over-use the underlying resources in a way that creates a conflict, e.g. by starting more recordings than the network bandwidth, demuxing hardware or disk bandwidth can handle. It is up to the applications to actually indicate all resource usage by doing bookings and resolving the resulting conflicts.
import "IToiSchedulerService.idl";
Public Member Functions | |
void | Schedule (in string category, in string activity, in TToiTime start, in long duration, out TToiBookingId id) raises (TToiInvalidArgumentException, TToiNotEnoughResourcesException) |
void | ScheduleSeries (in string category, in string activity, in TToiTime start, in long duration, in long weekdays, in long numberOfOccurrences, in TToiConflictStrategy conflictStrategy, out TToiSeriesId id) raises (TToiInvalidArgumentException, TToiNotEnoughResourcesException) |
void | Reschedule (in TToiBookingId id, in string category, in string activity, in TToiTime start, in long duration) raises (TToiInvalidArgumentException, TToiNotEnoughResourcesException) |
void | Remove (in TToiBookingId id) raises (TToiInvalidArgumentException) |
void | RemoveSeries (in TToiSeriesId id) raises (TToiInvalidArgumentException) |
void | GetConflicts (in TToiBookingId id, in string category, in string activity, in TToiTime start, in long duration, out TToiConflictSequence conflicts) raises (TToiInvalidArgumentException) |
void | GetSeriesConflicts (in TToiSeriesId id, in string category, in string activity, in TToiTime start, in long duration, in long weekdays, in long occurrence, out TToiConflictSequence conflicts) raises (TToiInvalidArgumentException) |
void | GetNextStartTime (in string categoryExpression, out TToiTime nextStart) |
void | GetBooking (in TToiBookingId id, out TToiBooking booking) raises (TToiInvalidArgumentException) |
void | GetSeries (in TToiSeriesId id, out TToiSeries series) raises (TToiInvalidArgumentException) |
void | GetBookingIds (in string categoryExpression, in TToiTime start, in TToiTime stop, out TToiBookingIdSequence bookings) raises (TToiInvalidArgumentException) |
void | GetSeriesIds (in string categoryExpression, out TToiSeriesIdSequence seriesIds) |
void | GetBookingIdsForSeries (in TToiSeriesId seriesId, out TToiBookingIdSequence bookings) raises (TToiInvalidArgumentException) |
void | AddTrigger (in TToiBookingId id, in TToiDelta delta) raises (TToiInvalidArgumentException) |
void | RemoveTrigger (in TToiBookingId id, in TToiDelta delta) raises (TToiInvalidArgumentException) |
void | AddTriggerOnBookings (in TToiBookingIdSequence ids, in TToiDelta delta) raises (TToiInvalidArgumentException) |
void | RemoveTriggerOnBookings (in TToiBookingIdSequence ids, in TToiDelta delta) raises (TToiInvalidArgumentException) |
void | GetTriggers (in TToiBookingId id, out TToiDeltaSequence deltas) raises (TToiInvalidArgumentException) |
void | SetParameter (in TToiBookingId id, in string name, in string value) raises (TToiInvalidArgumentException) |
void | UnsetParameter (in TToiBookingId id, in string name) raises (TToiInvalidArgumentException) |
void | GetParameter (in TToiBookingId id, in string name, out string value) raises (TToiInvalidArgumentException) |
void | GetParameterNames (in TToiBookingId id, out TToiParameterNameSequence names) raises (TToiInvalidArgumentException) |
void | SetParametersOnBookings (in TToiBookingIdSequence ids, in TToiParameterNameSequence names, in TToiParameterValueSequence values) raises (TToiInvalidArgumentException) |
void | SetSeriesParameter (in TToiSeriesId id, in string name, in string value) raises (TToiInvalidArgumentException) |
void | UnsetSeriesParameter (in TToiSeriesId id, in string name) raises (TToiInvalidArgumentException) |
void | GetSeriesParameter (in TToiSeriesId id, in string name, out string value) raises (TToiInvalidArgumentException) |
void | GetSeriesParameterNames (in TToiSeriesId id, out TToiParameterNameSequence names) raises (TToiInvalidArgumentException) |
void | SetCategorySubscription (in string address, in string categoryExpression) raises (TToiInvalidArgumentException) |
void | RegisterObserver (in IToiApplicationService::TToiApplicationId applicationId, in string address) raises (TToiInvalidArgumentException) |
void | ReleaseObserver (in string address) raises (TToiInvalidArgumentException) |
Public Attributes | |
const TToiBookingId | BOOKING_ID_NONE = 0 |
const TToiSeriesId | SERIES_ID_NONE = 0 |
const TToiTime | TIME_NOW = -1 |
const long | WEEKDAY_MONDAY = 1 |
const long | WEEKDAY_TUESDAY = 2 |
const long | WEEKDAY_WEDNESDAY = 4 |
const long | WEEKDAY_THURSDAY = 8 |
const long | WEEKDAY_FRIDAY = 16 |
const long | WEEKDAY_SATURDAY = 32 |
const long | WEEKDAY_SUNDAY = 64 |
const long | WEEKDAY_ALL_WEEKDAYS = 127 |
Classes | |
struct | TToiBooking |
struct | TToiSeries |
struct | TToiSolution |
Public Types | |
enum | TToiConflictStrategy { CONFLICT_STRATEGY_FAIL, CONFLICT_STRATEGY_SKIP_BOOKINGS } |
enum | TToiSolutionType { SOLUTION_TYPE_NONE, SOLUTION_TYPE_REMOVE } |
typedef long | TToiBookingId |
typedef long | TToiSeriesId |
typedef long | TToiTime |
typedef long | TToiWeekdayMask |
typedef sequence< TToiBookingId > | TToiBookingIdSequence |
typedef sequence< TToiSeriesId > | TToiSeriesIdSequence |
typedef sequence< TToiBooking > | TToiBookingSequence |
typedef sequence< TToiSolution > | TToiConflictSequence |
typedef long | TToiDelta |
typedef sequence< TToiDelta > | TToiDeltaSequence |
typedef sequence< string > | TToiParameterNameSequence |
typedef sequence< string > | TToiParameterValueSequence |
typedef long IToiSchedulerService::TToiBookingId |
Identifier for scheduler bookings.
typedef sequence< TToiBookingId > IToiSchedulerService::TToiBookingIdSequence |
Collection of booking identifiers.
typedef sequence< TToiSolution > IToiSchedulerService::TToiConflictSequence |
This type is used as a return value when user wants to test if a new schedule request conflicts with old ones. Each entry in the list contains an alternative solution if there are several ways to resolve the conflict, e.g. by removing a different set of bookings.
typedef long IToiSchedulerService::TToiDelta |
Type representing time in seconds since start point of a certain booking. It might be negative to indicate a start point in the past.
typedef sequence< TToiDelta > IToiSchedulerService::TToiDeltaSequence |
Collection of delta times, which are the time values in seconds since start point of each booking.
typedef sequence< string > IToiSchedulerService::TToiParameterNameSequence |
Sequence of parameter names.
typedef sequence< string > IToiSchedulerService::TToiParameterValueSequence |
Sequence of parameter values.
typedef long IToiSchedulerService::TToiSeriesId |
Identifier for a series of bookings.
typedef sequence< TToiSeriesId > IToiSchedulerService::TToiSeriesIdSequence |
Collection of series identifiers.
typedef long IToiSchedulerService::TToiTime |
Type representing time in seconds since the Unix epoch (1970-01-01 00:00:00).
typedef long IToiSchedulerService::TToiWeekdayMask |
Type representing weekday masks. This is a bitwise OR between weekday constants.
Conflict handling strategy to apply when trying to schedule a series that results in conflicts with previous bookings.
Conflict solution type. SOLUTION_TYPE_NONE means there is no solution and the booking is impossible. SOLUTION_TYPE_REMOVE means one or more solutions exist.
void IToiSchedulerService::AddTrigger | ( | in TToiBookingId | id, | |
in TToiDelta | delta | |||
) | raises (TToiInvalidArgumentException) |
Add triggers to a booking. For information on triggers, refer to the comments in IToiSchedulerObserver.
id | The booking identifier. | |
delta | The delta time in seconds since start point of an booking, may be negative to trigger a callback before the booking shall occur. |
TToiInvalidArgumentException | Raised if the booking does not exist. |
void IToiSchedulerService::AddTriggerOnBookings | ( | in TToiBookingIdSequence | ids, | |
in TToiDelta | delta | |||
) | raises (TToiInvalidArgumentException) |
Add triggers to a number of bookings. If such a trigger is already define for a booking, no new trigger will be added.
ids | A sequence of booking identifiers that should use the new trigger. | |
delta | The delta time in seconds since start point of a booking. |
TToiInvalidArgumentException | Raised if one or more bookings can not be found. |
void IToiSchedulerService::GetBooking | ( | in TToiBookingId | id, | |
out TToiBooking | booking | |||
) | raises (TToiInvalidArgumentException) |
Get information about a booking.
id | The booking identifier to find information about. |
booking | The booking information. |
TToiInvalidArgumentException | The exception will be thrown if can not find a booking with the identifier. |
void IToiSchedulerService::GetBookingIds | ( | in string | categoryExpression, | |
in TToiTime | start, | |||
in TToiTime | stop, | |||
out TToiBookingIdSequence | bookings | |||
) | raises (TToiInvalidArgumentException) |
Get the bookings during start and stop time, with the same category.
categoryExpression | The category to use as filter. Wildcard "*" is partly supported. SetCategorySubscription(). | |
start | Start time of the booking in seconds since the Unix epoch. A value of 0 means no limit. | |
stop | End time of the booking in seconds since the Unix epoch. A value of 0 means no limit. |
bookings | The sequence of booking identifiers found. |
TToiInvalidArgumentException | The exception will be thrown if start is later than stop. |
void IToiSchedulerService::GetBookingIdsForSeries | ( | in TToiSeriesId | seriesId, | |
out TToiBookingIdSequence | bookings | |||
) | raises (TToiInvalidArgumentException) |
seriesId | The identifier of the series to retrieve bookings for |
bookings | The sequence of booking identifiers found. |
TToiInvalidArgumentException | Raised if the identifier does not exist. |
void IToiSchedulerService::GetConflicts | ( | in TToiBookingId | id, | |
in string | category, | |||
in string | activity, | |||
in TToiTime | start, | |||
in long | duration, | |||
out TToiConflictSequence | conflicts | |||
) | raises (TToiInvalidArgumentException) |
Detect conflicts without actually createing a booking.
id | The identifier of the booking which need to be tested (in case of a rescheduling to be performed) or BOOKING_ID_NONE (in case of a new booking to be performed). | |
category | The category info for the attempted booking. | |
activity | The activity type for the attempted booking. | |
start | The start time for the attempted booking. Seconds since the Unix epoch. | |
duration | The duration time in seconds for the attempted booking. |
conflicts | If the attempt fails, this parameter will contain lists of existing bookings which have conflicts with the schedule request. Time and resources are considered here to determine whether conflicts exist. |
TToiInvalidArgumentException | The exception will be thrown if the identifer cannot be found. |
void IToiSchedulerService::GetNextStartTime | ( | in string | categoryExpression, | |
out TToiTime | nextStart | |||
) |
Get the expected starting time for next scheduled booking with matching category.
categoryExpression | The category to use as filter. Wildcard "*" is partly supported. SetCategorySubscription(). |
nextStart | The expected starting time of next scheduled booking. If a booking is currently ongoing, 0 will be returned. |
void IToiSchedulerService::GetParameter | ( | in TToiBookingId | id, | |
in string | name, | |||
out string | value | |||
) | raises (TToiInvalidArgumentException) |
Get user defined parameters associated with a booking.
id | The booking identifier. | |
name | The name of the parameter. |
value | The value of the parameter. |
TToiInvalidArgumentException | Raised if the booking does not exist. |
void IToiSchedulerService::GetParameterNames | ( | in TToiBookingId | id, | |
out TToiParameterNameSequence | names | |||
) | raises (TToiInvalidArgumentException) |
Get all user defined parameters names of a booking
id | The booking identifier. |
names | A sequence with names of the parameters. |
TToiInvalidArgumentException | Raised if the booking does not exist. |
void IToiSchedulerService::GetSeries | ( | in TToiSeriesId | id, | |
out TToiSeries | series | |||
) | raises (TToiInvalidArgumentException) |
id | The series identifier to find information about. |
series | The info of the scheduled series |
TToiInvalidArgumentException | The exception will be thrown if the series can not be found. |
void IToiSchedulerService::GetSeriesConflicts | ( | in TToiSeriesId | id, | |
in string | category, | |||
in string | activity, | |||
in TToiTime | start, | |||
in long | duration, | |||
in long | weekdays, | |||
in long | occurrence, | |||
out TToiConflictSequence | conflicts | |||
) | raises (TToiInvalidArgumentException) |
id | The identifier of the series which need to be tested (in case of a rescheduling to be performed) or SERIES_ID_NONE (in case of a new scheduling to be performed). | |
category | The category info for the attempted series. | |
activity | The activity type for the attempted series. | |
start | The start time for the attempted series. Seconds since the Unix epoch. | |
duration | The duration time in seconds for each occurence in the attempted series. | |
weekdays | Weekday mask indicating which days the series shall happen. | |
occurrence | The number occurrences to be tested. Must be greater than zero. |
conflicts | If the attempt fails, this parameter will contain lists of existing bookings which have conflicts with the schedule request. Time and resources are considered here to determine whether conflicts exist. |
TToiInvalidArgumentException | The exception will be thrown if the series can not be found. |
void IToiSchedulerService::GetSeriesIds | ( | in string | categoryExpression, | |
out TToiSeriesIdSequence | seriesIds | |||
) |
categoryExpression | The category to use as filter. Wildcard "*" is partly supported. SetCategorySubscription(). |
seriesIds | The sequence of series identifiers found. |
void IToiSchedulerService::GetSeriesParameter | ( | in TToiSeriesId | id, | |
in string | name, | |||
out string | value | |||
) | raises (TToiInvalidArgumentException) |
id | The identifier of the series. | |
name | The name of the parameter. |
value | The value of the parameter. |
TToiInvalidArgumentException | Raised if the series does not exist. |
void IToiSchedulerService::GetSeriesParameterNames | ( | in TToiSeriesId | id, | |
out TToiParameterNameSequence | names | |||
) | raises (TToiInvalidArgumentException) |
id | The identifier of the series. |
names | A sequence of names of the parameters. |
TToiInvalidArgumentException | Raised if the series does not exist. |
void IToiSchedulerService::GetTriggers | ( | in TToiBookingId | id, | |
out TToiDeltaSequence | deltas | |||
) | raises (TToiInvalidArgumentException) |
Get triggers associated with a booking.
id | The booking identifier. |
deltas | Sequences of trigger delta times associated with the booking. |
TToiInvalidArgumentException | Raised if the booking does not exist. |
void IToiSchedulerService::RegisterObserver | ( | in IToiApplicationService::TToiApplicationId | applicationId, | |
in string | address | |||
) | raises (TToiInvalidArgumentException) |
Register an observer of type IToiSchedulerObserver. The observer will receive events sent by this IToiSchedulerService instance.
applicationId | The identifier of the observing application. | |
address | The address where the IToiSchedulerService can find an IToiSchedulerObserver interface. |
TToiInvalidArgumentException | Raised if the specified address is invalid or if the application has already registered itself as an observer with the same address. |
void IToiSchedulerService::ReleaseObserver | ( | in string | address | ) | raises (TToiInvalidArgumentException) |
Release an observer previously registered with RegisterObserver.
address | The address where the IToiSchedulerService can find the registered IToiSchedulerObserver interface. |
TToiInvalidArgumentException | Raised if the specified address is invalid. |
void IToiSchedulerService::Remove | ( | in TToiBookingId | id | ) | raises (TToiInvalidArgumentException) |
Remove a booking.
id | The identifier of the booking to be removed. |
TToiInvalidArgumentException | The exception will be thrown if the booking identifier does not exist. |
void IToiSchedulerService::RemoveSeries | ( | in TToiSeriesId | id | ) | raises (TToiInvalidArgumentException) |
id | The identifier of the recurrent series to be removed. |
TToiInvalidArgumentException | The exception will be thrown if the series identifier does not exist. |
void IToiSchedulerService::RemoveTrigger | ( | in TToiBookingId | id, | |
in TToiDelta | delta | |||
) | raises (TToiInvalidArgumentException) |
Remove trigger from a booking.
id | The booking identifier. | |
delta | The delta time in seconds since start point of an booking, may be negative to trigger a callback before the booking shall occur. |
TToiInvalidArgumentException | Raised if the booking does not exist. |
void IToiSchedulerService::RemoveTriggerOnBookings | ( | in TToiBookingIdSequence | ids, | |
in TToiDelta | delta | |||
) | raises (TToiInvalidArgumentException) |
Remove triggers from a number of bookings. If there is no trigger with the specified delta - nothing will be changed for that booking.
ids | A sequence of booking identifiers that should remove the trigger. | |
delta | The delta time in seconds since start point of an booking. |
TToiInvalidArgumentException | Raised if one or more bookings can not be found. |
void IToiSchedulerService::Reschedule | ( | in TToiBookingId | id, | |
in string | category, | |||
in string | activity, | |||
in TToiTime | start, | |||
in long | duration | |||
) | raises (TToiInvalidArgumentException, TToiNotEnoughResourcesException) |
Requests changing and rescheduling of a booking.
id | The identifier of the booking which needs to be rescheduled. | |
category | The new category info for the booking. | |
activity | The new activity type for the booking. | |
start | The start time for the booking. Seconds since the Unix epoch. | |
duration | The duration time in seconds for the booking. |
TToiInvalidArgumentException | The exception will be thrown if the booking identifier does not exist, if changing to a time in the past, or if the new activity used other resources. | |
TToiNotEnoughResourcesException | The exception will be thrown if the reschedule request fails due to resource conflict. |
void IToiSchedulerService::Schedule | ( | in string | category, | |
in string | activity, | |||
in TToiTime | start, | |||
in long | duration, | |||
out TToiBookingId | id | |||
) | raises (TToiInvalidArgumentException, TToiNotEnoughResourcesException) |
Requests scheduling of a new booking.
category | The category info for the booking. | |
activity | The activity type for the booking. | |
start | The start time for the booking. Seconds since the Unix epoch. | |
duration | The duration time in seconds for the booking. |
id | A generated booking identifier that will be used in further communication with the client. If the request fails due to conflicts with other bookings this value will be set to BOOKING_ID_NONE. |
TToiInvalidArgumentException | The exception will be thrown if the activity type does not exist or if start or time is in the past. | |
TToiNotEnoughResourcesException | The exception will be thrown if the schedule request fails because requested resources exceeds the amount of resources available on the system. |
void IToiSchedulerService::ScheduleSeries | ( | in string | category, | |
in string | activity, | |||
in TToiTime | start, | |||
in long | duration, | |||
in long | weekdays, | |||
in long | numberOfOccurrences, | |||
in TToiConflictStrategy | conflictStrategy, | |||
out TToiSeriesId | id | |||
) | raises (TToiInvalidArgumentException, TToiNotEnoughResourcesException) |
category | The category info for the series. | |
activity | The activity type for the series. | |
start | The start time for the first occurence of the series. Seconds since the Unix epoch. | |
duration | The duration time in seconds for each occurence of the series. | |
weekdays | Weekday mask indicating which days the recurring series shall happen. | |
numberOfOccurrences | The number of occurrences for the series. | |
conflictStrategy | The type of conflict handling strategy to use if a conflict with previously scheduled bookings is detected. |
id | A generated series identifier that will be used in further communication with the client. If the request fails due to conflicts with other bookings this value will be set to SERIES_ID_NONE. |
TToiInvalidArgumentException | The exception will be thrown if the activity type does not exist or if start or time is in the past. | |
TToiNotEnoughResourcesException | The exception will be thrown if the schedule request fails because requested resources exceeds the amount of resources available on the system. |
void IToiSchedulerService::SetCategorySubscription | ( | in string | address, | |
in string | categoryExpression | |||
) | raises (TToiInvalidArgumentException) |
This method is used to filter which categories the application is notified about.
address | The address of an already registered IToiSchedulerObserver. | |
categoryExpression | The category expression of the bookings to be notified about. Wildcard "*" is supported when it is at the beginning or end of a string. And a single "*" match all category. Supported wildcard is like that "*dvr", "dvr*", "*". Otherwise it is treated as an ordinary character. |
void IToiSchedulerService::SetParameter | ( | in TToiBookingId | id, | |
in string | name, | |||
in string | value | |||
) | raises (TToiInvalidArgumentException) |
Add user defined parameters to a booking.
id | The booking identifier. | |
name | The name of the parameter to set. If a parameter with the same name already exists, it will be overwritten. | |
value | The value of the parameter to set. |
TToiInvalidArgumentException | Raised if the booking does not exist. |
void IToiSchedulerService::SetParametersOnBookings | ( | in TToiBookingIdSequence | ids, | |
in TToiParameterNameSequence | names, | |||
in TToiParameterValueSequence | values | |||
) | raises (TToiInvalidArgumentException) |
Add user defined parameters to a set of bookings.
ids | A sequence of booking identifiers to update with parameters. | |
names | A sequence of parameter names to be set. Existing parameters with matching names will be overwritten. | |
values | A sequence of parameter values to be set, matching the parameter names. |
TToiInvalidArgumentException | Raised if any of the bookings do not exist. |
void IToiSchedulerService::SetSeriesParameter | ( | in TToiSeriesId | id, | |
in string | name, | |||
in string | value | |||
) | raises (TToiInvalidArgumentException) |
id | The identifier of the series. | |
name | The name of the parameter to set. If a parameter with the same name already exists, it will be overwritten. | |
value | The value of the parameter to set. |
TToiInvalidArgumentException | Raised if the series does not exist. |
void IToiSchedulerService::UnsetParameter | ( | in TToiBookingId | id, | |
in string | name | |||
) | raises (TToiInvalidArgumentException) |
Remove user defined parameters from a booking.
id | The booking identifier. | |
name | The name of the parameter to remove. |
TToiInvalidArgumentException | Raised if the booking does not exist. |
void IToiSchedulerService::UnsetSeriesParameter | ( | in TToiSeriesId | id, | |
in string | name | |||
) | raises (TToiInvalidArgumentException) |
id | The identifier of the series. | |
name | The name of the parameter to remove. |
TToiInvalidArgumentException | Raised if the series does not exist. |
When schedule failed, the application may call GetConflicts() with a booking identifier of BOOKING_ID_NONE to get a list of suggested solutions.
This constant can also be accessed from toi.consts.IToiSchedulerService.BOOKING_ID_NONE.
Indicates that there is no recurrent booking associated.
This constant can also be accessed from toi.consts.IToiSchedulerService.SERIES_ID_NONE.
const TToiTime IToiSchedulerService::TIME_NOW = -1 |
Indicates that the requested scheduled time is the current time (now).
This constant can also be accessed from toi.consts.IToiSchedulerService.TIME_NOW.
const long IToiSchedulerService::WEEKDAY_ALL_WEEKDAYS = 127 |
Bit mask value for all week days.
This constant can also be accessed from toi.consts.IToiSchedulerService.WEEKDAY_ALL_WEEKDAYS.
const long IToiSchedulerService::WEEKDAY_FRIDAY = 16 |
Bit mask value for Friday.
This constant can also be accessed from toi.consts.IToiSchedulerService.WEEKDAY_FRIDAY.
const long IToiSchedulerService::WEEKDAY_MONDAY = 1 |
Bit mask value for Monday.
This constant can also be accessed from toi.consts.IToiSchedulerService.WEEKDAY_MONDAY.
const long IToiSchedulerService::WEEKDAY_SATURDAY = 32 |
Bit mask value for Saturday.
This constant can also be accessed from toi.consts.IToiSchedulerService.WEEKDAY_SATURDAY.
const long IToiSchedulerService::WEEKDAY_SUNDAY = 64 |
Bit mask value for Sunday.
This constant can also be accessed from toi.consts.IToiSchedulerService.WEEKDAY_SUNDAY.
const long IToiSchedulerService::WEEKDAY_THURSDAY = 8 |
Bit mask value for Thursday.
This constant can also be accessed from toi.consts.IToiSchedulerService.WEEKDAY_THURSDAY.
const long IToiSchedulerService::WEEKDAY_TUESDAY = 2 |
Bit mask value for Tuesday.
This constant can also be accessed from toi.consts.IToiSchedulerService.WEEKDAY_TUESDAY.
const long IToiSchedulerService::WEEKDAY_WEDNESDAY = 4 |
Bit mask value for Wednesday.
This constant can also be accessed from toi.consts.IToiSchedulerService.WEEKDAY_WEDNESDAY.