Sort:  

Now I think of it, wouldn't it be better to have queue list of witnesses for generating blocks? I think that would give you idea when you are in queue and if you miss you get notified if not meaning you produced the block...

Yes, similarly, for miner-witnesses, there is the miner-witness queue, but for witnesses, you'll have to figure out fields like virtual_last_update, virtual_position, and virtual_scheduled_time. The witness scheduling algorithm is somewhat complex and semi-random. But you'll figure it out!