@AroundInvoke
	public Object enforceSla(InvocationContext context) throws Exception {
		Long timestamp = System.currentTimeMillis();
		
		if(this.controller.isSlaComplient(timestamp) && this.controller.isAvailable()){
			SystemUnavailable unavailability = this.controller.buildUnavailability(timestamp);
			if(unavailability != null){
				new Thread(unavailability).start();
			}
		}
		
		if(this.controller.isSlaComplient(timestamp)){
			if(this.controller.isAvailable()){
				this.controller.registerRequest(true);
				throw new RequestFaliedException(timestamp);
			}else{
				this.controller.registerRequestOnDowntime();
				throw new ServiceUnavailableException(timestamp);
			}
		}else{
			if(this.controller.isAvailable()){
				this.controller.registerRequest(false);
				return context.proceed();
			}else{
				this.controller.registerRequestOnDowntime();
				throw new ServiceUnavailableException(timestamp);
			}
		}
		
	}