I realized a month had gone by without me fulfilling my promise.

Literal

Promise [obj-を] not-fulfilling one month [subj-が] has-passed-[regret-てしまった]-[nominalizer-のに] noticed.

Differs in two choices from the closely related variant: 果たさず versus 果たさずに (both work, the latter slightly less terse), and ことに versus のに as the nominalizer/marker for 'noticing.' The のに here is the concessive/content marker 'at (the fact that),' not the concessive 'although.' Context is key.