Skip to content

Commit

Permalink
1) Fix inconsitencies between automatic and human messages in the exp…
Browse files Browse the repository at this point in the history
…orted commentary feed.

2) Allow 4-byte Unicode characters in team names
3) Implement basic commentary messages for submission during the freeze
  • Loading branch information
Dlougach committed Oct 23, 2022
1 parent f4b8d77 commit ce532ec
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 14 deletions.
6 changes: 6 additions & 0 deletions config.yaml.template
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,12 @@ katalyzer:
ranks: 10
# exec: "./capture.sh {teamId} {time} {currentRank} {potentialRank}"

# SubmissionAfterFreeze - simple notification for submissions during freeze time.
# Filters according to team's pre-freeze rank
submissionAfterFreeze:
enable: true
ranks: 25

codeActivity:
scoreboardFreezeMinutes: 240
defaultGranularityMinutes: 5
Expand Down
12 changes: 6 additions & 6 deletions create_icat_instance.sql
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ CREATE TABLE IF NOT EXISTS `teams` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`reservation_id` int(11) DEFAULT NULL,
`team_id` int(11) NOT NULL,
`team_name` varchar(150) NOT NULL,
`team_name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`institution_id` int(11) DEFAULT NULL,
`site_id` int(11) DEFAULT NULL,
`school_name` varchar(150) DEFAULT NULL,
Expand All @@ -269,12 +269,12 @@ CREATE TABLE IF NOT EXISTS `teams` (
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;


DROP TABLE IF EXISTS 'teammembers';
DROP TABLE IF EXISTS `teammembers`;
CREATE TABLE teammembers(
id int(11) NOT NULL,
team_id int(11) NOT NULL,
full_name varchar(50) DEFAULT NULL,
role varchar(30) DEFAULT NULL,
`id` int(11) NOT NULL,
`team_id` int(11) NOT NULL,
`full_name` varchar(50) DEFAULT NULL,
`role` varchar(30) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

Expand Down
1 change: 1 addition & 0 deletions katalyze/src/main/java/katalyzeapp/ConfigReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ private void setupRules(Analyzer analyzer) {
addRuleIfEnabled(analyzer, "newLeader", new NewLeader(config.getInt("katalyzer.rule.newLeader.breakingRanks",4), config.getInt("katalyzer.rule.newLeader.ranks", 10)));
addRuleIfEnabled(analyzer, "rejectedSubmission", new RejectedSubmission(config.getInt("katalyzer.rule.RejectedSubmission.ranks", 10)));
addRuleIfEnabled(analyzer, "rankPredictor", new RankPredictor(config.getInt("katalyzer.rule.rankPredictor.ranks", 10)));
addRuleIfEnabled(analyzer, "submissionAfterFreeze", new SubmissionAfterFreeze(config.getInt("katalyzer.rule.submissionAfterFreeze.ranks", 25)));
addRuleIfEnabled(analyzer, "allProblemsSolved", new CriterionRule(new AllProblemsSolved()));
addRuleIfEnabled(analyzer, "allTeamsSolvedOneProblem", new CriterionRule(new AllTeamsSolvedOneProblem()));
}
Expand Down
6 changes: 3 additions & 3 deletions katalyze/src/main/java/model/Analyzer.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ private LoggableEvent buildEventFromAnalystMsg(AnalystMessage msg) {
if (firstTeam == null) {
firstTeam = team;
}
message = message.replace(teamTag, team.getName());
message = message.replace(teamTag, team.stringForCommentary());
}
}

List<String> problemsInMessage = hashtagFinder.problems(message);
for (String problemTag : problemsInMessage) {
Problem problem = hashtagFinder.getProblem(contest, problemTag);
if (problem != null) {
message = message.replace(problemTag, problem.getNameAndLabel());
message = message.replace(problemTag, problem.stringForCommentary());
}
}

Expand Down Expand Up @@ -273,4 +273,4 @@ public boolean isStopped() {
}
}



2 changes: 1 addition & 1 deletion katalyze/src/main/java/model/ContestProperties.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public static ContestProperties fromJSON(JSONObject src) {
ContestProperties target = new ContestProperties();
target.id = src.getString("id");
target.name = src.getString("name");
target.formalName = src.getString("formal_name");
target.formalName = src.optString("formal_name", null);

String startTime = src.optString("start_time", null);
if (startTime != null && !startTime.equals("null")) {
Expand Down
5 changes: 2 additions & 3 deletions katalyze/src/main/java/model/LoggableEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

public class LoggableEvent {
private static int nextEventId = 0;
private static final TeamNameAsOrganization teamNameExtractor = new TeamNameAsOrganization();


public final Contest contest;
Expand Down Expand Up @@ -61,10 +60,10 @@ private static String replaceMarkup(String source, String tag, String replacemen

private String getCleartextMessage(String message) {
if (problem != null) {
message = replaceMarkup(message, "problem", problem.getNameAndLabel());
message = replaceMarkup(message, "problem", problem.stringForCommentary());
}
if (team != null) {
message = replaceMarkup(message, "team", teamNameExtractor.apply(team));
message = replaceMarkup(message, "team", team.stringForCommentary());
}
return message;
}
Expand Down
5 changes: 5 additions & 0 deletions katalyze/src/main/java/model/Problem.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,9 @@ public boolean equals(Object o) {
return id.equals(other.id);
}

public String stringForCommentary() {
// This will at some point change into "{problems:<problem ID>}".
return getNameAndLabel();
}

}
7 changes: 7 additions & 0 deletions katalyze/src/main/java/model/Team.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,11 @@ public String getShortName() {
public Organization getOrganization() {
return organization == null ? Organization.NullObject : this.organization;
}

public String stringForCommentary() {
// This is same as "TeamNameAsOrganization.apply" at the moment,
// but might change as we adopt 2022-07 notation ("{teams:<team ID>}")
Organization org = getOrganization();
return Organization.isNull(org) ? getName() : org.getDisplayName();
}
}
44 changes: 44 additions & 0 deletions katalyze/src/main/java/rules/SubmissionAfterFreeze.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package rules;

import model.*;

public class SubmissionAfterFreeze extends StateComparingRuleBase implements SolutionSubmittedEvent {

// Only submissions of teams with rank <= threshold will result in a notification.
final private int rankThreshold;

public SubmissionAfterFreeze(int rankThreshold) {
this.rankThreshold = rankThreshold;
}

public void onSolutionSubmitted(StandingsAtSubmission standingsAtSubmission) {
Standings standingsBefore = standingsAtSubmission.before;
Contest contest = standingsBefore.getContest();
InitialSubmission submission = standingsAtSubmission.submission;

if (!contest.isFrozen(submission.contestTimeMilliseconds)) {
return;
}

Team team = submission.team;
Score teamScore = standingsBefore.scoreOf(team);

if (standingsBefore.rankOf(team) > rankThreshold) {
return;
}

if (teamScore.isSolved(submission.getProblem())) {
// Skip notifications for problems already solved.
return;
}

String message = "{team} submitted a solution for {problem}.";
LoggableEvent event = new LoggableEvent(contest, submission.contestTimeMilliseconds, message, EventImportance.Whatever, standingsAtSubmission.submission, null);
notify(event);
}

public String toString() {
return String.format("Submissions after freeze (rank <= %d)", rankThreshold);
}
}

6 changes: 5 additions & 1 deletion www/region.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@
$db = init_db();

// get the region/super region names
$result = mysqli_query($db, "select * from team_regions where $query");
if ($query == "") {
$result = mysqli_query($db, "select * from team_regions");
} else {
$result = mysqli_query($db, "select * from team_regions where $query");
}

$team_ids = array();
$name = "(unknown)";
Expand Down

0 comments on commit ce532ec

Please sign in to comment.