public void AnnounceServer(string serverId, ServerContext context) { if (serverId == null) throw new ArgumentNullException("serverId"); if (context == null) throw new ArgumentNullException("context"); var data = new ServerData { WorkerCount = context.WorkerCount, Queues = context.Queues, StartedAt = DateTime.UtcNow, }; _connection.Execute( @"merge HangFire.Server as Target " + @"using (VALUES (@id, @data, @heartbeat)) as Source (Id, Data, Heartbeat) " + @"on Target.Id = Source.Id " + @"when matched then update set Data = Source.Data, LastHeartbeat = Source.Heartbeat " + @"when not matched then insert (Id, Data, LastHeartbeat) values (Source.Id, Source.Data, Source.Heartbeat);", new { id = serverId, data = JobHelper.ToJson(data), heartbeat = DateTime.UtcNow }); }
public void AnnounceServer(string serverId, int workerCount, IEnumerable<string> queues) { if (serverId == null) throw new ArgumentNullException("serverId"); if (queues == null) throw new ArgumentNullException("queues"); var data = new ServerData { WorkerCount = workerCount, Queues = queues.ToArray(), StartedAt = DateTime.UtcNow, }; // TODO: set the LastHeartbeat column to now, make it non-nullable. _connection.Execute( @"merge HangFire.Server as Target " + @"using (VALUES (@id, @data)) as Source (Id, Data) " + @"on Target.Id = Source.Id " + @"when matched then update set Data = Source.Data, LastHeartbeat = null " + @"when not matched then insert (Id, Data) values (Source.Id, Source.Data);", new { id = serverId, data = JobHelper.ToJson(data) }); }