def get_filtered_normalized_events(self):
<EOL>user_image = google_v2_operations.get_action_image(self._op,<EOL>_ACTION_USER_COMMAND)<EOL>need_ok = google_v2_operations.is_success(self._op)<EOL>events = {}<EOL>for event in google_v2_operations.get_events(self._op):<EOL><INDENT>if self._filter(event):<EOL><INDENT>continue<EOL><DEDENT>mapped, match = self._map(event)<EOL>name = mapped['<STR_LIT:name>']<EOL>if name == '<STR_LIT>':<EOL><INDENT>if not need_ok or '<STR_LIT>' in events:<EOL><INDENT>continue<EOL><DEDENT><DEDENT>if name == '<STR_LIT>':<EOL><INDENT>if match.group(<NUM_LIT:1>) != user_image:<EOL><INDENT>continue<EOL><DEDENT><DEDENT>events[name] = mapped<EOL><DEDENT>return sorted(events.values(), key=operator.itemgetter('<STR_LIT>'))<EOL>
Filter the granular v2 events down to events of interest.

        Filter through the large number of granular events returned by the
        pipelines API, and extract only those that are interesting to a user. This
        is implemented by filtering out events which are known to be uninteresting
        (i.e. the default actions run for every job) and by explicitly matching
        specific events which are interesting and mapping those to v1 style naming.

        Events which are not whitelisted or blacklisted will still be output,
        meaning any events which are added in the future won't be masked.
        We don't want to suppress display of events that we don't recognize.
        They may be important.

        Returns:
          A list of maps containing the normalized, filtered events.