code: func New(jobInformer batchinformers.JobInformer, client clientset.Interface) *Controller {
  	eventBroadcaster := record.NewBroadcaster()
  	eventBroadcaster.StartLogging(klog.Infof)
  	eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: client.CoreV1().Events("")})
  
  	if client != nil && client.CoreV1().RESTClient().GetRateLimiter() != nil {
  		metrics.RegisterMetricAndTrackRateLimiterUsage("ttl_after_finished_controller", client.CoreV1().RESTClient().GetRateLimiter())
  	}
  
  	tc := &Controller{
  		client:   client,
  		recorder: eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "ttl-after-finished-controller"}),
  		queue:    workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "ttl_jobs_to_delete"),
  	}
  
  	jobInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
  		AddFunc:    tc.addJob,
  		UpdateFunc: tc.updateJob,
  	})
  
  	tc.jLister = jobInformer.Lister()
  	tc.jListerSynced = jobInformer.Informer().HasSynced
  
  	tc.clock = clock.RealClock{}
  
  	return tc
  }
docs: // New creates an instance of Controller